黑马程序员技术交流社区
标题:
关于抓鱼分鱼的问题 不太懂
[打印本页]
作者:
举举手
时间:
2015-4-15 22:31
标题:
关于抓鱼分鱼的问题 不太懂
#include <stdio.h>
int leastFishNum(){
int totalFishNum = 0; //我们要试探进行所以需要一个变量假定捕鱼的总数量数量
//从6条鱼开始试探,
for (totalFishNum = 6; 1; totalFishNum++) {
int flag = 1; //我们还需要一个标记,如果我们试探出了一个合理的数字,用它来结束循环
//5个人一共分配了5次
//我们把试探的值赋值给鱼的总量totalFishNum
int leftFishNum = totalFishNum; //定义一个变量记录每次分鱼后剩下的条数,第一次分为捕鱼的数量
for (int i = 1; i <= 5; i++) {
//如果鱼的总数量减去1一定能被5整除
if ((leftFishNum - 1) % 5 == 0)//满足if条件说明第一次分配完成
{
//经过了第一次分配,A拿走了它的那份
//后面每一次分配都是,拿走第一份剩余四份
//那么剩余的鱼 总数应该是
leftFishNum = 4 * (leftFishNum - 1) / 5; //我们通过假设x的值 (x-1)/5 * 4
// printf("total = %d\n", leftFishNum);
}else
{
flag = 0; //如果不能被整除,就让我们的标记为0
break; //结束当前循环
}
}
//我们的flag 只有在找到了能够瞒住我们分配条件的第一个数出现的时候
//也就是找到了最少要有多少鱼的时候才会为1
if(flag)
{
break;
}
}
//printf("Total = %d\n",totalFishNum); /*输出结果*/
return totalFishNum;
}
int shengYu(int a)
{
//每个人都按同样的方法拿鱼说明最后一个人至少拿到了一个鱼
// 所以第5个人拿到了1个鱼 还剩4个鱼
// 第4 个人拿到了 (1*5+1)/4 还剩(1*5+1)*5+1
// 第a个人拿到了((a+1)*5+1)/4
int i;//定义i来存每一拿的鱼 第5个人至少拿了一条
if(a==5)
{
i=1;
}else
{
i=(shengYu(a+1)*5+1)/4;
}
return i;
}
int main()
{
int sum=0;
int leastFishNum();
int sum2=leastFishNum();
sum =shengYu(1)*5+1;//用shengYu函数求出第一个人拿的鱼 再求出刚开始钓的鱼
printf("总共的鱼最少有%d条\n",sum);
printf("总共的鱼最少有%d条\n",sum2);
}
复制代码
老师给的答案和我自己弄得 不太一样不太懂
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2