100c之17:平分七筐鱼

<?xml version="1.0" encoding="utf-8"?> 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

转载于:https://www.cnblogs.com/chaolong/archive/2013/05/18/3086086.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值