跳至正文

USACO 1.2.4 Palindromic Squares

  • OI路程

  这题硬搜就是,不过在提交前找到两个mistack:

  1、没审清楚题目,题目只要求平方是回文数,而没有要求那个数自身也是个回文数,我以为那个数自身也是回文数。
  2、在转换进制的时候,犯了一个超级低级的错误,把进制顺着使用了,也就是说比如13的二进制是:1101,而我的程序做出来就是1011,弄翻了!当然,很快就改好了,提交,一次性AC!
/
LANG:
C

ID: yylogoo1
PROG:
palsquare

/
#include <stdio.h>
#define MAP
"0123456789ABCDEFGHIJ"
#define MAX 18
int n;
char str[MAX];

int isreback(char str, int len)
{
        int i, j;
        i = 0, j = len – 1;
        while(i < j){
                if(str[i++] !=
str[j–]){
                        return 0;
                }
        }
        return 1;
}

int change(int num)
{
        /

        mistack
2:

          这里写错了,str应该是逆向的方式写的!
        /
        int i = MAX;
        while(num != 0){
                str[–i] = MAP[num %
n];
                num /= n;
        }
        return i;
}

int ispal(int num)
{
        int i, len;
        i =
change(num);
        len = MAX – i;
        return isreback(&str[i], len);
}

void output(int num)
{
        printf("%s",
&str[change(num)]);
}

int main(void)
{
        int i;
        freopen("palsquare.in", "r", stdin);
        freopen("palsquare.out", "w", stdout);
        scanf("%d", &n);
        for(i = 1; i <= 300; i++){
                /

                mistack
1:

                  题目没审清楚,  只要求平方是回文数,
                而没要求自己也是回文数数
                /
                if(ispal(i

i)){
                        output(i);
                        printf(" ");
                        output(i *
i);
                        printf("\n");
                }
        }
        return 0;
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注