100c之17:平分七筐鱼

100c之17:平分七筐鱼

100c之17:平分七筐鱼

Table of Contents

1 问题

加以丙三位渔夫出海打渔,他们随船带了21只箩筐。当晚返航时,他们发现有7筐装满鱼,还有7筐只装了半筐鱼,另外七筐没有鱼。由于他们没有秤只好认为这七筐鱼的重量是相等的。七个半筐鱼的重量是相等的。在不把鱼到处来的前提下,怎样将鱼和筐平分为三份?

2 分析

目标:每人3.5桶鱼,7个桶。同时要避免重复方案

3 解决方案

使用一个三乘三的数组保存最终的结果。

 1:  /**
 2:   * @file   017average7fish.c
 3:   * @author Chaolong Zhang <emacsun@163.com>
 4:   * @date   Fri May 17 19:58:10 2013
 5:   * 
 6:   * @brief  加以丙三位渔夫出海打渔,他们随船带了21只箩筐。当晚返航时,他们发现有7筐装满鱼,还有7筐只装了半筐鱼,另外七筐没有鱼。由于他们没有秤只好认为这七筐鱼的重量是相等的。七个半筐鱼的重量是相等的。在不把鱼到处来的前提下,怎样将鱼和筐平分为三份?
 7:   *  
 8:   * 最终的结果是: 每人3.5筐鱼和七个筐。
 9:   */
10:  #include <stdio.h>
11:  int main(int argc, char *argv[])
12:  {
13:    int a[3][3],count;
14:    int i,j,k,m,n,flag;
15:    for (i=0; i <= 3; ++i)
16:    {
17:      a[0][0] = i;
18:      for (j=i; j <= 7-i && j<=3; ++j)
19:      {
20:        a[1][0] = j;
21:        if ((a[2][0]=7-j-a[0][0])>3) continue;
22:        if (a[2][0]<a[1][0]) break;
23:        for (k=1; k <= 5; k+=2)
24:        {
25:          a[0][1] =k;
26:          for (m=1; m < 7-k; m+=2)
27:          {
28:            a[1][1]=m;
29:            a[2][1]=7-k-m;
30:            for (flag=1,n=0; flag && n<3; n++)
31:            {
32:              if (a[n][0]+a[n][1]<7 && a[n][0]*2+a[n][1]==7)
33:              {
34:                a[n][2] = 7 - a[n][0] - a[n][1];
35:              }
36:              else flag=0;
37:            }
38:            if(flag)
39:            {
40:              printf ("No.%d method     Full basket  semi-basket Empty \n", ++count);
41:              for (n=0; n < 3; n++)
42:              {
43:                printf ("fisher %c:  %d  %d  %d\n",'A'+n, a[n][0],a[n][1],a[n][2]);
44:              }
45:            }
46:          }
47:        }
48:      }
49:    }
50:    return 0;
51:  }

Date:

Author: emacsun

Org version 7.8.02 with Emacs version 23

Validate XHTML 1.0
posted @ 2013-05-18 20:38  emacsun  阅读(380)  评论(0编辑  收藏  举报