趣味编程之平分七筐鱼

    甲、乙、丙三位渔夫出海打鱼,他们随船带了21只箩筐。当晚返航时,他们发现有7筐装满了鱼,还有7筐只装了半筐鱼,另外7筐则是空的。由于他们没有秤,只好通过目测认为7个满筐鱼的重量是相等的,7个半筐鱼的重量也是相等的。在不将鱼倒出来的前提下,怎么将鱼和筐平分为三份?

 

问题分析:

根据提议可知:每个人应分到7个箩筐,每人各3.5筐鱼。采用3*3数组来表示三个人分到的东西。

数组的每行每列元素之和都是7;

数组行: 满筐 + 半筐 = 3.5筐;

每个人所得满筐数不会超过3筐;

每个人至少有1个半筐;

 

 

 1  class  Program
 2  {
 3       static   void  Main( string [] args)
 4      {
 5           int [,] fishermen  =   new   int [ 3 3 ];
 6 
 7           for  ( int  m  =   1 ; m  <=   3 ; m ++ )     // A
 8          {
 9              fishermen[ 0 0 =  m;
10              fishermen[ 0 1 =  ( int )(( 3.5   -  ( double )m)  /   0.5 );
11              fishermen[ 0 2 =   7   -  fishermen[ 0 1 -  fishermen[ 0 0 ];
12 
13               for  ( int  n  =   1 ; n  <=   3 ; n ++ )     // B
14              {
15                   if  (n  <  m)
16                       continue ;
17                  fishermen[ 1 0 =  n;
18                  fishermen[ 1 1 =  ( int )(( 3.5   -  ( double )n)  /   0.5 );
19 
20                   if  (fishermen[ 1 1 <   0 )
21                       break ;
22 
23                  fishermen[ 1 2 =   7   -  fishermen[ 1 1 -  fishermen[ 1 0 ];
24 
25                   for  ( int  j  =   1 ; j  <=   3 ; j ++ )     // C
26                  {
27                       if  (j  <  n  ||  j  +  n  +  m  !=   7 )
28                           continue ;
29 
30                      fishermen[ 2 0 =  j;
31                      fishermen[ 2 1 =  ( int )(( 3.5   -  ( double )j)  /   0.5 );
32                       if  (fishermen[ 2 1 <   0 )
33                           break ;
34                      fishermen[ 2 2 =   7   -  fishermen[ 2 1 -  fishermen[ 2 0 ];
35 
36                       if  (fishermen[ 2 1 +  fishermen[ 1 1 +  fishermen[ 0 1 ==   7   &&
37                          fishermen[ 2 0 +  fishermen[ 1 0 +  fishermen[ 0 0 ==   7 )
38                      {
39                           for  ( int  i  =   0 ; i  <   3 ; i ++ )
40                          {
41                              Console.WriteLine(i  +   " "   +  fishermen[i,  0 +   "   "   +  fishermen[i,  1 +   "   "   +  fishermen[i,  2 ]);
42                          }
43                          Console.WriteLine( " ---------------------------------- " );
44                           break ;
45                      }
46                  }
47              }
48          }
49      }
50  }

 

 

运行结果:

0:1 5 1
1:3 1 3
2:3 1 3
----------------------------------
0:2 3 2
1:2 3 2
2:3 1 3
----------------------------------

转载于:https://www.cnblogs.com/linboran/archive/2010/04/29/1723886.html

你可能感兴趣的:(趣味编程之平分七筐鱼)