- #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);
- }
复制代码 老师给的答案和我自己弄得 不太一样不太懂
|
|