黑马程序员技术交流社区

标题: 这道题做不上了卡在这里一上午了,C语言编写,请写明注释 [打印本页]

作者: jiangenhao    时间: 2014-4-19 15:10
标题: 这道题做不上了卡在这里一上午了,C语言编写,请写明注释
本帖最后由 jiangenhao 于 2014-4-25 15:33 编辑

A/B/C/D/E 5个人在某天夜里合伙去捕鱼,到凌晨时都疲惫不堪,于是各自找地方睡觉,第二天,A第一个醒来,他将鱼分成5份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分成5份,把多余的一条鱼扔掉,拿走自己的一份。C/D/E依次醒来,按同样的方法拿鱼。问他们合伙至少捕了多少条鱼?
作者: 悠悠·漠漠    时间: 2014-4-19 16:43
分析写到程序里面!
  1. #include <stdio.h>


  2. int main()
  3. {
  4.         int n,i,x,flag=1; /*flag:控制标记*/
  5.         for(n=6;flag;n++) /*采用试探的方法。令试探值n逐步加大*/
  6.         {
  7.                 for(x=n,i=1&&flag;i<=5;i++)
  8.                 {
  9.                         if((x-1)%5==0)
  10.                         {
  11.                                 x=4*(x-1)/5;
  12.                         } else
  13.                         {
  14.                                  flag=0; /*若不能分配则置标记falg=0退出分配过程*/
  15.                         }
  16.                 }
  17.                 if(flag)
  18.                 {
  19.                         break; /*若分配过程正常结束则找到结果退出试探的过程*/
  20.                  } else
  21.                 {
  22.                         flag=1; /*否则继续试探下一个数*/
  23.                 }
  24.         }
  25.         printf("5个人总共捕获的鱼数为:%d\n",n);/*输出结果*/
  26.         return 0;
  27. }
复制代码

作者: 董月峰    时间: 2014-4-19 21:19
本帖最后由 董月峰 于 2014-4-19 21:34 编辑

很久之前的一个题目了,当时我的思路如下
  1. int main()
  2. {
  3.     for(int x=1;x<999;x++)
  4.     {
  5.         // 第5人醒来看到了sum条鱼,他仍了一条,拿走了x条
  6.         double sum = 5 * x + 1;
  7.         // 依次向上算,第一个人醒来看到了sum条,仍了一条,拿走了第四人醒来看到鱼数目的四分之一
  8.         for(int i = 4; i >= 1; i--)
  9.         {
  10.             sum = sum/4 * 5 + 1;
  11.         }
  12.         // 若sum 正好是整数,结束循环
  13.         if(sum == (int)(sum))
  14.         {
  15.             printf("%d\n", (int)(sum));
  16.             break;
  17.         }
  18.     }

  19.     return 0;
  20. }
复制代码









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