不好意思啊,刚才分析错了,while循环是必要的,你的错误主要还是1.if(a=b)应该为if(a==b)
2.如果各位数字均不相同,flag=1,那么while循环无法结束...
我改了一下,
下面的代码好像可以了:#include "stdio.h"
void main()
{
int n,a=0,b,temp,flag=1;
scanf("%d",&n);
while(flag)
{
a=n%10;n/=10; temp=n;
for(b=temp%10;temp!=0;temp/=10)
{
if(a==b)
{
flag=0;
break;
}
}
if(n==0)
break;//跳出while循环
}
if(flag)
printf("yes\n");
else
printf("no\n");
}
原先我修改的程序,输入100,123,555都没有问题,但是输入112,445却也输出yes,很明显是不正确的,后来修改的程序,若输入112,445,输出no,是满足要求的....
你再好好分析一下....
希望对你有所帮助吧
上述程序,当输入18621时,仍然会输出yes,也是不正确的,问题可能出在for循环上,所以建议用while循环,(我试过,for循环这样写也是可以的:for(;temp!=0;temp/=10){b=temp%10;.....}最后的代码修改如下:
#include "stdio.h"
void main()
{
int n,a=0,b,temp,flag=1;
scanf("%d",&n);
while(flag)
{
a=n%10;//第一次循环时a为n的个位数字,在while内循环中分别和n的高位数字进行比较;第二次循环时,a为n的十位数字,在while内循环中和高位值进行比较(低位在上一循环中已经比较过了,不再比较).....然后依次类推,直到循环结束(如果n的每位数字都不同,那么a最高可为n的最高位数字)...
n/=10;
temp=n;
printf("%d,%d ",a,temp);//输出a的值,便于和b比较,输出temp的值,便于跟踪n的值
while(temp)
{b=temp%10;
printf("%d ",b);//输出b的值,便于和a进行比较
if(a==b)
{
flag=0;
break;//跳出while内循环
}
temp/=10;//for循环中,这一语句也能正常执行,如果用for循环,这一语句删除...
}
printf("\n");
if(n==0)
break;//跳出while外循环
}
if(flag)
printf("yes\n");
else
printf("no\n");
printf("%d,%d",a,b);//输出a,b的值,如果是yes的话,那么a,b值应该相等,如果是no的话,a,b的值是不相等的...
}
如果不想要输出那么多数据,也就是只输出yes或no,那么可以对照你的程序,把我添加的printf语句删除...
这个题用循环的确有些麻烦,如果用数组的话,可能要简单很多
呵呵
温馨提示:答案为网友推荐,仅供参考