A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 举举手 中级黑马   /  2015-4-15 22:31  /  767 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马