在acm的那个平台中可以用字符来处理数字吗? 看看我的这个求回文的怎么老是通不过啊

来源:百度知道 编辑:UC知道 时间:2024/06/06 00:36:04
题目要求大概是这样的:第一行输入一个整数n,第二行输入n个数据 每个数据之间用空格隔开,第三行 输入所有的回文数 每个数据之间用空格隔开,如果没有则输出NO。我每次在我学校的那个平台上提交的时候结果是 worng answer。我学校的平台只对内开放 所以在外无法登陆 跟北大的 判断是一样 我的代码如下,帮忙看看 :#include<stdio.h>
int h(char a[])
{
int i,j,flag=1;
for(i=0;a[i]!='\0';i++) ;/*看有多少个字符*/
j=i-1;
for(i=0;i<=j/2;i++)
if(a[i]!=a[j-i]) {flag=0;break;}

return flag;
}/*判断是否为回文数*/

int main()
{
int n,i,j,d=0;
char a[100][100];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s",a[i]);
for(i=0;i<n;i++)
{
if(h(a[i]))
{
if(d!=0) printf(" ");
for(j=0;a[i][j]!='\0';j++)
printf("%c",a[i][j]);
d=1;
}
}
if(d==0) printf("NO\n");

return 0;
}

你没给出数据范围我很难给你看,但看你程序写的应该是每个数的最大长度是100,这样的话你的数组要定义为a[100][101],因为最后的'\0'也需要空间存。

不过如果每个数据的最大长度是99,那当我没说

另外说一点,你最好在输出所有的回文数后换行,否则容易PE
下面是我改过的:
#include<stdio.h>
int h(char a[])
{
int i,j,flag=1;
for(i=0;a[i]!='\0';i++) ;/*看有多少个字符*/
j=i-1;
for(i=0;i<=j/2;i++)
if(a[i]!=a[j-i]) {flag=0;break;}

return flag;
}/*判断是否为回文数*/

int main()
{
int n,i,j,d=0;
char a[100][101];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s",a[i]);
for(i=0;i<n;i++)
{
if(h(a[i]))
{
if(d!=0) printf(" ");
for(j=0;a[i][j]!='\0';j++)
printf("%c",a[i][j]);
d=1;
}
}
if(d==0) printf("NO\n");
else printf("\n");

return 0;
}