求解一道c语言的题目

A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,保持走自己的一份。C、D、E依次醒来,也按同样的方法拿走鱼。问他们合伙至少捕了多少条鱼?

挺好玩的,我做了一下,得出是3121,不知道对不对,楼上的都认为最后一个人(E)分的时候只剩下6条,然后他丢掉一条,把5条分成5份,也就是留下4条给别的人,自已拿走一条,也就要所谓的每人最少分得一条,但是这是不可能的,因为E分的鱼其实是D好心留下来的4份(给其他的4个人的)!但是6怎么分成4份?所以说D不可能留下6条鱼给E,我的代码也发给你看看,
#include <studio.h>
void main(){
int all=2;
int aout=2;//用来放最终结果
while(true)
{ int i=5;
int y=0;
all=aout;
while(i>0)
{
if(all!=1&&all%5==1)
{
all=(all-(all/5)-1);丢掉一条,并分成5份
i--;//做五次
y++;}
else i=0;
}
if(y==5)
{ printf("他们打了%d条鱼",aout);
break;
}
aout++;

}
}
}
然后在网上看了看其他人的做的,答案也是3121!但是他们的方法要比我的好,写的思路要好一些,所以说3121才是正确的答案!!!!!。
楼上楼下的都曲解题意了!
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-15
#include "stdio.h"
main()
{
int i,n,j;
for(i=1;i<10000;i++)
{
n=i;
for(j=0;j<5;j++)
n=(n-1)/5;
if(n==1) //每人至少分一条鱼
break;
}
if(n==1)
printf("%ld",i);
}

很简单的逻辑,至少捕多少鱼的意思是:每人至少分有1条鱼!总共捕了3906条鱼~
第2个回答  2011-09-15
//求至少抓到多少鱼 设E最后只拿走一条鱼 这样总数就最少
int sum = 1;
for ( int j = 0; j < 5; j++)
{
sum = sum * 5 + 1; //每个人醒来看到的鱼的总数 从 E D C B A
printf("%d\n", sum);
}
printf("鱼总数:%d\n", sum);
第3个回答  2011-09-15
思路应该是这样
依题意知:
E拿走的鱼的数量为 1 条,则E醒来的时候看到的鱼的数量为 1*5+1=6 条;
D醒来的时候看到的鱼的数量为 E看到的鱼的数量*5+1 条;
... ...
A醒来的时候看到的鱼的数量为 B看到的鱼的数量*5+1 条;

A醒来的时候看到的鱼的数量即合伙捕鱼的总数量
这个问题可以用c语言的递归方法求解:
uint16 CountFish(uint8 value)
{
uint16 tmp;
if(value == 0)
{
return 6;
}
else
{
tmp = CountFish(value - 1)*5 +1 ;
}
return tmp;
}

A--E为5个人 所以在主函数中调用CountFish(4),则可以求出结果3096
其中uint8为 unsigned char
uint16为 unsigned int

c语言题目求解
接着执行for循环中的p++,结果是p=13。因p=13,p<=10为假,退出循环。

C语言求助,题目有图,希望过程详细一些? 。。。
int a[8][8] 是一个两维数组:a[行数][列数] 就是8行,8列,int a[8][8]={20,30,32,50,52,68,52,88, 72,78,61,89,1,4,101,24, 11,14,97,83};int a[8][8]={{20,30,32,50,52,68,52,88}, {72,78,61,89,1,4,101,24},{11,14,97,83}};上面两行 等效...

一道c语言题目 求大神指点下算法?
根据题意,随机生成红绿蓝球任意个数,并任意顺序排列。这里采用随机数实现。统计按红绿蓝顺序排列最少交换次数,我的思路是:第一步:循环将最后一个红色球与最靠前的其它两色球(并且满足位置在红球之前)交换。第二步:循环将最后一个绿球与最靠前的蓝球(必须在绿球之前)交换。include <stdio.h> ...

一道C语言题目,看图~大神帮忙解答下吧!急急急急急!!在线等
答案是D 在C语言中数组赋值可以如A,那样,【】里面定义了长度5{}中有最大不超过5个值,则赋值成功 B在5个数值之内所以也是正确的 答案C,就是另外中赋值方法,在【】中不定义长度,因此数组a[]的实际长度取决于{}中的值的数量,也就是说在C答案中有5个0作为数值,因此C答案中的a[]的实际...

一道c语言的计算题。求细致一点的讲解~~~追加!!
题目:输入两个整数 x 和 y,求它们的和、差、积、商、余数。这是一道比较基础的 C 语言计算题目,可以通过输入两个整数,然后使用加、减、乘、除等运算符进行计算,最后输出结果。下面是一份示例代码,给你参考:include <stdio.h> int main() {int x, y;printf("请输入两个整数:\\n");...

求解一道c语言题目 请详细解释一下怎样输入输出多组数据。谢谢!_百度...
include<stdio.h>int main(void){ int a[6][5]={{0}}; int i=0,j=0,k=0; int temp; for(i=0;i<6;i++) { for(j=0;j<5;j++) { scanf("%d",&a[i][j]); } } for(i=0;i<6;i++) { for(j=0;j<5;j++) { fo...

求解c语言问题
形式二:[a,b],其中a表示行数,b表示列数。形式三:[a,b],其中a与行数有关,b与列数有关。在循环中a初值取(行数\/2)并自减,b初值取(列数\/2*-1)并自增。代码实现方式很多。这里题目指定要二维数组,但没有指定是什么类型的二维数组。考虑代码通用性,我用字符指针型二维数组来写。

求解C语言题目,最好有解释,谢谢:
1.*p1和*p2都是指向float类型的指针。它们的值只能是地址。A B C 中p1或p2的值都是地址,只有D中a[0]+1结果为float类型的数字,不是地址,所以应该选D 2.A 错误,函数的返回值又函数自身定义决定 B正确 C 错误 main函数可以放在程序的后面,前面可以放全局变量和函数等 D 错误 C语言程序总...

一道C语言题目求解,我想知道s,w,t的值分别是怎么得到的
int s,w=0,t;a=-1,b=3,c=3;if(c>0){ s=a+b;\/\/s = 2 } if(a<=0)\/\/a=-1,if条件成立执行 { if(b>0)\/\/if条件不成立,此条语句不执行 { if(c<=0){ w=a-b;} } } else if(c>0)\/\/虽然else if条件成立,但是此条语句不执行,如果不懂,\/\/建议重学一下if语句。{...

求解C语言程序输出题,如图,谢谢。
解析:本题目主要考了if-else语句,include<stdio.h> void main(){ int a=100, x=10, y=20, ok1=5, ok2=0;if(x<y) \/*10<20满足条件,执行下边的*\/ if(y!=10) \/*20不等于10,满足条件,继续执行*\/ if(!ok1) \/*对5取反,那么是0,那么不执行下边,而执行else*\/ a=1;else ...

相似回答