100c之17:平分七筐鱼
100c之17:平分七筐鱼
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: }
作者:emacsun
出处:http://www.cnblogs.com/chaolong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。