甲、乙、丙三位渔夫出海打鱼,他们随船带了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 }
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
----------------------------------