c语言作业:输入一个整数,判断该数的每位数字是否都不相同,如果是则输出yes,如果不是则输出no

#include "stdio.h"
void main()
{
int n,a=0,b,flag=1;
scanf("%d",&n);
while(flag)
{
a=n%10; n/=10;
for(b=n%10;n!=0;n/=10)
{

if(a=b)
{
flag=0;
break;
}

}
}
if(flag)
printf("yes\n");
else
printf("no\n");
}

我不知道错哪了,求指点~急急急!!!非常急

不好意思啊,刚才分析错了,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语句删除...
这个题用循环的确有些麻烦,如果用数组的话,可能要简单很多
呵呵
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-11
#include "stdio.h"
void main()
{
int n,a=0,b,flag=1;
scanf("%d",&n);//不需要while,否则没有相同位的进入死循环
a=n%10; n/=10;//a为个位数
for(;n!=0;n/=10)
{
b=n%10;//这句要放在for里面,b为取十位,百位***数
if(a==b)//判断是否相等
{
flag=0;
break;
}

}

if(flag)
printf("yes\n");
else
printf("no\n");
}
第2个回答  2011-04-11
判断 语句 if(a==b) ==是判断是否等于 =是赋值 一定为真追问

改了C-FREE运行不了饿~

追答

用的是C FREE吗 那要把 主函数 void main() 改成 int main() 它不允许主函数是void 可以不写 直接为main()
#include "stdio.h"
main()
{
int n,a,b,flag=1;
scanf("%d",&n);
a=n%10;
n=n/10;
for(b=n%10;n!=0;n=n/10)
if(a==b)
{
flag=0;
break;
}
if(!flag)
printf("yes\n");
else
printf("no\n");
}
这样只能判断是不是全一样的...不能判断全都不一样..

本回答被提问者和网友采纳
第3个回答  2011-04-11
你应该控制输入的位数,比如值允许输入个四位数,要不然后面不太好判断
你应该存储每一位的数字,然后相互之间进行比较,你的这个程序很难看懂。
第4个回答  2011-04-11
逻辑不对
相似回答