输入n(2<=n<=5),再输入n个整数保存在数组[a]中,通过循环查找n个数是否有重复的,有则输出Yes,无输出No.

答案上面给出的循环部分的程序是:for(i=0;i<n-2;i++){for(j=i+1;j<=n-1;j++){if(a[i]==a[j])break;}if(j<=n... 答案上面给出的循环部分的程序是:for(i=0;i<n-2;i++){
for(j=i+1;j<=n-1;j++){
if(a[i]==a[j])
break;}
if(j<=n-1)break;
}
if(i==n-1)
puts("No");
else puts("Yes");}
} 两个break看不懂了,分别是指跳出哪个循环?后面的i==n-1是什么意思呢?前面不是已经有i<n-2了吗?详解一下这部分程序吧,谢谢了!
展开
 我来答
z_blue_b
2011-06-15 · TA获得超过199个赞
知道小有建树答主
回答量:279
采纳率:0%
帮助的人:286万
展开全部
思路是这样的。
比如说有一列数:1,2,1,3,4
也就是n=5
1.第一个循环,依次取"1,2,1,3”,比如说先取"1"
2.第二个循环,取"1"以后的数依此比较。
3.如果后面的数与"1“相同,第二层循环结束
4.如果第二层循环提前结束,既(j<=n-1),说明出现了重复,没有必要再去比较后面的了,所以结束第一个循环。
5.如果第一层循环走到了最后,既(i==n-1),说明比较完了最后一个数,表示没有重复。
逾期L倩
2011-06-15 · TA获得超过136个赞
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:100万
展开全部
第一个break跳出for(j=i+1;j<=n-1;j++)
第二个break跳出for(i=0;i<n-2;i++)
第一个break调用了就说明找到a[i]==a[j],外面那层循环也没必要了,这是j是<=n-1的,所以用第二个if和break跳出循环.
i==n-1说明for(i=0;i<n-2;i++)到最后即,i=n-3都没有出现a[i]==a[j],于是i=n-2循环结束,i还要自加一次,于是i=n-1.说明没有a[i]==a[j],输出NO
i若不是等于n-1说明是中途break,就说明有a[i]==a[j],输出yes
追问
谢谢哈。后面的部分明白了,还有一点:第一句for(i=0;i<n-2;i++)里面为什么是i<n-2呢?举个例子:n=4;a[0],a[1],a[2],a[3];即是(i=0;i<2;i++),则先是a[0]与a[1],a[2],a[3]比较,而后是a[1]与a[2],a[3]比较,然后就结束了。a[2]与a[3]并没有比较啊,如果他们两个相等怎么办呢?(答案是正确的,运行结果也对,但这一点实在是不明白),十分感谢!
追答
好吧..不好意思.我疏忽了
"i==n-1说明for(i=0;i<n-2;i++)到最后即,i=n-3都没有出现a[i]==a[j],于是i=n-2循环结束,i还要自加一次,于是i=n-1.说明没有a[i]==a[j],输出NO"这段错了..i<n-2这样的话i=n-2循环结束,i不会自加,就停留在i=n-2.所以无论有没重复的最后都是输出yes
应该是for(i=0;i<n-1;i++)

参考资料: sername

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式