求解一道c语言的题目

[复制链接]
查看11 | 回复4 | 2011-9-16 01:23:32 | 显示全部楼层 |阅读模式
A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,保持走自己的一份。C、D、E依次醒来,也按同样的方法拿走鱼。问他们合伙至少捕了多少条鱼?
回复

使用道具 举报

千问 | 2011-9-16 01:23:32 | 显示全部楼层
挺好玩的,我做了一下,得出是3121,不知道对不对,楼上的都认为最后一个人(E)分的时候只剩下6条,然后他丢掉一条,把5条分成5份,也就是留下4条给别的人,自已拿走一条,也就要所谓的每人最少分得一条,但是这是不可能的,因为E分的鱼其实是D好心留下来的4份(给其他的4个人的)!但是6怎么分成4份?所以说D不可能留下6条鱼给E,我的代码也发给你看看,#includestudio.hvoidmain(){intall=2;intaout=2;//用来放最终结果while(true){inti=5;inty=0;all=aout;while(i0){if(all!=1丢掉一条,并分成5份i--;//做五次y;}elsei=0;}if(y==5){printf(\"他们打了%d条鱼\",aout);break;}aout;}}}然后在网上看了看其他人的做的,答案也是3121!但是他们的方法要比我的好,写的思路要好一些,所以说3121才是正确的答案!!!!#楼上楼下的都曲解题意了!
回复

使用道具 举报

千问 | 2011-9-16 01:23:32 | 显示全部楼层
//求至少抓到多少鱼设E最后只拿走一条鱼这样总数就最少intsum=1;for(intj=0;j5;j){sum=sum*51;//每个人醒来看到的鱼的总数从EDCBAprintf(\"%d\\n\",sum);}printf(\"鱼总数:%d\\n\",sum);
回复

使用道具 举报

千问 | 2011-9-16 01:23:32 | 显示全部楼层
#include\"stdio.h\"main(){inti,n,j;for(i=1;i10000;i){n=i;for(j=0;j5;j)n=(n-1)/5;if(n==1)//每人至少分一条鱼break;}if(n==1)printf(\"%ld\",i);}很简单的逻辑,至少捕多少鱼的意思是:每人至少分有1条鱼!总共捕了3906条鱼~
回复

使用道具 举报

千问 | 2011-9-16 01:23:32 | 显示全部楼层
思路应该是这样依题意知:E拿走的鱼的数量为1条,则E醒来的时候看到的鱼的数量为1*51=6条;D醒来的时候看到的鱼的数量为E看到的鱼的数量*51条;......A醒来的时候看到的鱼的数量为B看到的鱼的数量*51条;A醒来的时候看到的鱼的数量即合伙捕鱼的总数量这个问题可以用c语言的递归方法求解:uint16CountFish(uint8value){uint16tmp;if(value==0){return6;}else{tmp=CountFish(value-1)*51;}returntmp;}A--E为5个人所以在主函数中调用CountFish(4),则可以求出结果3096其中uint8为unsignedcharuint16为unsignedint
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行