当前位置:Gxlcms > mysql > USACO1.2.4PalindromicSquares

USACO1.2.4PalindromicSquares

时间:2021-07-01 10:21:17 帮助过:24人阅读

USACO 1.2.4 Palindromic Squares 为盲打1 !为颈椎1 ! 题意:……一点要注意,题目的意思是说1~300这些数字的平方转换成对应的进制时是回文数即可,但是!每行的第一个数字是用要求的进制来表示的!!!!!!!!一开始测试案例错了我还真没看懂。 细节代

USACO 1.2.4 Palindromic Squares

为盲打+1 !为颈椎+1 !

题意:……一点要注意,题目的意思是说1~300这些数字的平方转换成对应的进制时是回文数即可,但是!每行的第一个数字是用要求的进制来表示的!!!!!!!!一开始测试案例错了我还真没看懂。

细节+代码:

/*   
ID: 15257142   
LANG: C   
TASK: palsquare
*/ 
#include
#include
#include
int n;
int trans(int num,char b[20]){
	int k,g;
	k = -1;
	while(num>0){
		k++;
		g = num%n;
		if(g>9)
			b[k] = g-10+'A';
		else
			b[k] = g-0+'0';
		num = num/n;
	}
	b[k+1] = '\0';
	return k;
}
int transnum(int num,int n,char e[20]){
	int k;
	k = -1;
	while(num>0){
		k++;
		if(num%n>9)
			e[k] = num%n-10+'A';
		else
			e[k] = num%n+'0';
		num = num/n;
	}
	return k;
}
int main(){ //太长了,一开始题意明确的话就不会现在这样……
	freopen("palsquare.in","r",stdin);
	freopen("palsquare.out","w",stdout);
	int i,j,k,g,t,f;
	char c[20],d[20],b[20],e[20];
	scanf("%d",&n);
	for(i = 1;i<=300;i++){
		k = i*i;
		g = trans(k,b);
		for(j = 0;j<=g/2;j++)
			c[j] = b[j];
		c[j] = '\0';
		if(g%2==1)
			f = g/2+1;
		else
			f = g/2;
		for(j = g;j>=f;j--)
			d[g-j] = b[j];
		d[g-j] = '\0';
		if(strcmp(c,d)==0){
			k = transnum(i,n,e);
			for(j = k;j>=0;j--)
				printf("%c",e[j]);
			printf(" ");
			printf("%s\n",b);
		}
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}

人气教程排行