搜索
您的当前位置:首页正文

USACO1.2.4PalindromicSquares

2020-11-09 来源:知库网

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;
}
Top