捕鱼和分鱼问题

sandbad0x 2009-08-16 11:56:18
有这样一道题:
A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。
日上三杆,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,
也将鱼分为五份,把多余的一条鱼扔掉,保持走自己的一份。C、D、E依次醒来,也按同样的方法拿
走鱼。问他们合伙至少捕了多少条鱼?
(思路:定鱼的总数为X,则X可以按照题目的要求进行五次分配:X-1后可被5整除,余下的鱼为4*(X-1)、5。
若X满足上述要求,则X就是题目的解。)

#include<stdio.h>
void main()
{
int n,i,x,flag=1; /*flag:控制标记*/
for(n=6;flag;n++) /*采用试探的方法。令试探值n逐步加大*/
{
for(x=n,i=1&&flag;i<=5;i++) //i控制分配5次
if((x-1)%5==0) x=4*(x-1)/5;
else flag=0; /*若不能分配则置标记falg=0退出分配过程*/
if(flag) break; /*若分配过程正常结束则找到结果退出试探的过程*/ else flag=1; /*否则继续试探下一个数*/
}
printf("Total number of fish catched=%d\n",n); /*输出结果*/
}

结果为:Total number of fish catched = 3121




但是如果程序改为如下:(第二个循环处添加了中括号,箭头处),为什么就输不出结果呢???

#include<stdio.h>
void main()
{
int n,i,x,flag=1; /*flag:控制标记*/
for(n=6;flag;n++) /*采用试探的方法。令试探值n逐步加大*/
{
for(x=n,i=1&&flag;i<=5;i++) //i控制分配5次
----> {
if((x-1)%5==0) x=4*(x-1)/5;
else flag=0; /*若不能分配则置标记falg=0退出分配过程*/
if(flag) break; /*若分配过程正常结束则找到结果退出试探的过程*/ else flag=1; /*否则继续试探下一个数*/
----> }
}
printf("Total number of fish catched=%d\n",n); /*输出结果*/
}



问题如果过于简单请勿见笑..谢谢!本题肯定不是最好的解法,只是问了那个问题而已.
...全文
796 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sandbad0x 2009-08-17
  • 打赏
  • 举报
回复
一楼的,好像没说啥哦。
mstlq 2009-08-17
  • 打赏
  • 举报
回复

#include<stdio.h>
void main()
{
int n,i,x,flag=1; /*flag:控制标记*/
for(n=6;flag;n++) /*采用试探的方法。令试探值n逐步加大*/
{
for(x=n,i=1&&flag;i<=5;i++) //i控制分配5次
----> {
if((x-1)%5==0) x=4*(x-1)/5;
else flag=0; /*若不能分配则置标记falg=0退出分配过程*/
----> }
if(flag) break; /*若分配过程正常结束则找到结果退出试探的过程*/ else flag=1; /*否则继续试探下一个数*/

}
printf("Total number of fish catched=%d\n",n); /*输出结果*/
}
sandbad0x 2009-08-17
  • 打赏
  • 举报
回复
原来如此,又是这么简单。
hit_flying 2009-08-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 koo007 的回复:]
一楼的,好像没说啥哦。
[/Quote]

他说的是作用域的问题,
if(flag) break; /*若分配过程正常结束则找到结果退出试探的过程*/ else flag=1; /*否则继续试探下一个数*/
这一句若是放在你后来加的中括号内则不能控制外层循环结束,程序陷入死循环

注:for循环再不加括号的时候其作用域仅限于其后的一条语句,所以你正确的那个程序和1楼的改法是等效的

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧