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

#include"stdio.h"voidmain(){intn,a=0,b,flag=1;scanf("%d",&n);while(flag){a=n%10;n/=10... #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");
}

我不知道错哪了,求指点~急急急!!!非常急
展开
 我来答
百度网友b79519e
2011-04-12 · TA获得超过3399个赞
知道大有可为答主
回答量:1417
采纳率:100%
帮助的人:1334万
展开全部
不好意思啊,刚才分析错了,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语句删除...
这个题用循环的确有些麻烦,如果用数组的话,可能要简单很多
呵呵
劳伤痕
2011-04-11 · TA获得超过793个赞
知道小有建树答主
回答量:364
采纳率:0%
帮助的人:447万
展开全部
#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");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
血天蓝海
2011-04-11 · 超过20用户采纳过TA的回答
知道答主
回答量:60
采纳率:0%
帮助的人:0
展开全部
判断 语句 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");
}
这样只能判断是不是全一样的...不能判断全都不一样..
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小七说LoRa
2011-04-11 · TA获得超过461个赞
知道小有建树答主
回答量:433
采纳率:0%
帮助的人:234万
展开全部
你应该控制输入的位数,比如值允许输入个四位数,要不然后面不太好判断
你应该存储每一位的数字,然后相互之间进行比较,你的这个程序很难看懂。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沧海雄风2009
2011-04-11 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8525
采纳率:79%
帮助的人:2859万
展开全部
逻辑不对
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式