搜索
查看: 1521|回复: 1
打印 上一主题 下一主题

求助!

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-7 16:41:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币

问题:把316这个数表示为两个数的和,其中一个数是13的倍数,另一个数是11的倍数
算法一:void main(){

int i;
for(i=1;13*i<316;i++)
if((316-13*i)%11==0)
printf("%d+%d=316\n",13*i,316-13*i);
}
输出结果:52+264=316
                 195+121=316

算法二:void main(){

int i;
for(i=1;i<316;i++)
if(!((316-i*13)%11))
break;
printf("%d+%d=316\n",i*13,316-i*13);
}

输出结果:52+246=316
为什么算法二有BUG....求解??????问题出在哪里?

最佳答案

查看完整内容

问题出在break;上面。程序这样写的意思就是一旦找到符合条件的i后立即退出循环,这样肯定就不能把所有可能解都求出来了。将break;删除i就能遍历1~315,从而找出所有可能的解。
沙发
发表于 2013-4-7 16:41:06 | 只看该作者
问题出在break;上面。程序这样写的意思就是一旦找到符合条件的i后立即退出循环,这样肯定就不能把所有可能解都求出来了。将break;删除i就能遍历1~315,从而找出所有可能的解。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表