读书人

判断回数算法肯定没有关问题但是就

发布时间: 2012-04-05 12:42:40 作者: rapoo

判断回数,算法肯定没问题,但是就是函数结果读不进去....求助!!急!
#include<stdio.h>
#include<string.h>

int IS_A_HuiShu(char a[],int L)
{
int R=0;int P;
P=L-1;
while((a[P]==a[R]))
{
R++,P--;
}
if((P==0)&&(R==L-1))
return 1;
else
return 0;
}

void main()
{
char a[100],ch;
int i=0,flag=0;
printf("Enter a string (End with @):");
while((ch=getchar())!='@') //这个地方明明是i从0开始 但是i总是读第一个之前就等于1了
{ //导致上面的函数里面的都要减去1。
a[i]=ch;
i++;
}
flag=IS_A_HuiShu(a,i);
if(flag==1)
printf("it's a 回数");
else
printf("不是回数");
}


希望各位高手大侠就用原算法上修改
不要用新的算法 .

[解决办法]
while((a[P]==a[R])) //有越界行为。。while(a[P]==a[R] && R < L && P > -1)
{
R++,P--;
}
if((P==0)&&(R==L-1)) //上面遍历完后这里的 P<0 或 R ==L 两取一就OK了
[解决办法]
可能会越界,P 有可能变为 -1, R 有可能变为 L

加一个条件
while(P > 0 && (a[P]==a[R]))

C/C++ code
#include<stdio.h>#include<string.h>int IS_A_HuiShu(char a[],int L){    int R=0;int P;    P=L-1;    while(P > 0 && (a[P]==a[R]))       {        R++,P--;    }    if((P==0)&&(R==L-1))        return 1;    else        return 0;}int main(){    char a[100],ch;    int i=0,flag=0;    printf("Enter a string (End with @):");    while((ch/
[解决办法]
其实很简单,就是把
C/C++ code
if((P==0)&&(R==L-1))return 1;elsereturn 0;
[解决办法]
C/C++ code
#include<stdio.h>#include<string.h>int IS_A_HuiShu(char a[],int L){    int R=0;    int P;    P=L-1;    while((a[P] == a[R]) && R < L-1)   //在加一个条件控制    {        R++;//逗号改成分号        P--;    }    if((P == 0)&&(R==L-1))        return 1;    else        return 0;}void main(){    char a[100],ch;    int i=0,flag=0;    printf("Enter a string (End with @):");    while((ch=getchar())!='@') //这个地方明明是i从0开始 但是i总是读第一个之前就等于1了    { //导致上面的函数里面的都要减去1。        a[i]=ch;        i++;    }    printf("%d\n",i);    flag=IS_A_HuiShu(a,i);    if(flag==1)        printf("it's a 回数");    else        printf("不是回数");}
[解决办法]
LZ看看这个,思路比较清晰。

C/C++ code
#include<stdio.h>#include<string.h>int IS_A_HuiShu(char *a, int len){      int low=0,high=len-1;      int flag;           //回文式数标志      while( low<=high )         {          flag=0;          if( a[low]==a[high] )          {              flag=1;              low++;              high--;          }           else              break;      }      if(flag)          return 1;    //是回文式数      return 0;}int main(){         char a[100];    printf("hi,buddy!\n请输入一个数字字符串,我来判断是否是回文式数! \n");    scanf("%s",a);         if(  IS_A_HuiShu( a, strlen(a) )  )        printf("是回数\n");    else        printf("不是回数\n");    return 0;}
[解决办法]
#include<stdio.h>
#include<string.h>

int IS_A_HuiShu(char a[],int L)
{
int R=0;int P;
P=L-1;
while((a[R]==a[P])&&P>R)
{
R++;
P--;
}
if(R>=P)
return 1;
else


return 0;
}

void main()
{
char a[100],ch;
int i=0,flag=0;
printf("Enter a string (End with @):\n");
while((ch=getchar())!='@')
{
a[i]=ch;
i++;
}
flag=IS_A_HuiShu(a,i);
if(flag==1)
printf("it's a 回数\n");
else
printf("不是回数\n");
}

读书人网 >C语言

热点推荐