本来应该是很简单的一个题目,因为昨天才写前面一题(USACO 1.2.4 Palindromic Squares),就是使用那里写的一些子函数即可AC,但是因为现在是以学习为目的,所以自然是重写一次,但是重写同样的两个函数,却出现了不应该有的错误,具体错误如下:
和昨天的代码比较了一下,昨天的代码层次性更强,直接将字符串的长度作为参数传给了判断是否为回文数的函数,而今天是在判断回文数的函数内部进行的!
不过因为没有别的问题,所以还是一次性AC了:
LANG: C
ID: yylogoo2
PROG: dualpal
/
#include <stdio.h>
#define STR "0123456789"
#define MAX 50
char str[MAX];
int change(int num, int base)
{
int i = MAX;
while(num != 0){
str[–i] = STR[num % base];
num /= base;
}
return i;
}
int ispal(int start)
{
char num = &str[start];
/
Mistack 2:
下面j的赋值错误了。第一次是写成了j = MAX – i, 后来修改成了j = MAX – i – 1 还是错了
最后一次才改对..
/
int i = 0, j = MAX – start – 1;
while(i < j){
if(num[i] != num[j]){
return 0;
}
/
Mistack 1:
忘记下面的递增和递减!
*/
i++, j–;
}
return 1;
}
int main(void)
{
int i, j, k, l;
int m, n;
freopen("dualpal.in", "r", stdin);
freopen("dualpal.out", "w", stdout);
scanf("%d%d", &m, &n);
for(i = n + 1, k = 0; k < m; i++){
l = 0;
for(j = 2; j <= 10 && l != 2; j++){
if(ispal(change(i, j))){
l++;
}
}
if(l == 2){
printf("%d\n", i);
k++;
}
}
return 0;
}