黑马程序员技术交流社区

标题: 关于抓鱼分鱼的问题 不太懂 [打印本页]

作者: 举举手    时间: 2015-4-15 22:31
标题: 关于抓鱼分鱼的问题 不太懂
  1. #include <stdio.h>
  2. int leastFishNum(){
  3.    
  4.     int totalFishNum = 0; //我们要试探进行所以需要一个变量假定捕鱼的总数量数量
  5.     //从6条鱼开始试探,
  6.     for (totalFishNum = 6; 1; totalFishNum++) {
  7.         int flag = 1;  //我们还需要一个标记,如果我们试探出了一个合理的数字,用它来结束循环
  8.         //5个人一共分配了5次
  9.         //我们把试探的值赋值给鱼的总量totalFishNum
  10.         int leftFishNum = totalFishNum; //定义一个变量记录每次分鱼后剩下的条数,第一次分为捕鱼的数量
  11.         for (int i = 1; i <= 5; i++) {
  12.             
  13.             //如果鱼的总数量减去1一定能被5整除
  14.             if ((leftFishNum - 1) % 5 == 0)//满足if条件说明第一次分配完成
  15.             {
  16.                 //经过了第一次分配,A拿走了它的那份
  17.                 //后面每一次分配都是,拿走第一份剩余四份
  18.                 //那么剩余的鱼 总数应该是
  19.                 leftFishNum = 4 * (leftFishNum - 1) / 5; //我们通过假设x的值  (x-1)/5 * 4
  20.                 // printf("total = %d\n", leftFishNum);
  21.             }else
  22.             {
  23.                 flag = 0; //如果不能被整除,就让我们的标记为0
  24.                 break; //结束当前循环
  25.             }
  26.             
  27.         }
  28.         
  29.         //我们的flag 只有在找到了能够瞒住我们分配条件的第一个数出现的时候
  30.         //也就是找到了最少要有多少鱼的时候才会为1
  31.         if(flag)
  32.         {
  33.             break;
  34.         }
  35.     }
  36.    
  37.     //printf("Total = %d\n",totalFishNum);     /*输出结果*/
  38.     return totalFishNum;
  39.    
  40. }

  41. int shengYu(int a)
  42. {
  43.         //每个人都按同样的方法拿鱼说明最后一个人至少拿到了一个鱼
  44.     // 所以第5个人拿到了1个鱼 还剩4个鱼
  45.     //           第4 个人拿到了 (1*5+1)/4   还剩(1*5+1)*5+1
  46.     //         第a个人拿到了((a+1)*5+1)/4
  47.         int i;//定义i来存每一拿的鱼 第5个人至少拿了一条
  48.         if(a==5)
  49.         {
  50.                 i=1;
  51.         }else
  52.         {
  53.                 i=(shengYu(a+1)*5+1)/4;
  54.         }
  55.         return i;
  56. }
  57. int main()
  58. {
  59.         int sum=0;
  60.         int leastFishNum();
  61.         int sum2=leastFishNum();
  62.         sum =shengYu(1)*5+1;//用shengYu函数求出第一个人拿的鱼 再求出刚开始钓的鱼
  63.         printf("总共的鱼最少有%d条\n",sum);
  64.         printf("总共的鱼最少有%d条\n",sum2);
  65. }
复制代码
老师给的答案和我自己弄得  不太一样不太懂





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2