输入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了吗?详解一下这部分程序吧,谢谢了! 展开
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了吗?详解一下这部分程序吧,谢谢了! 展开
2个回答
展开全部
第一个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
第二个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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询