题目描述:
中国古代数学家张丘建在他的《算经》中提出了“百钱百鸡”问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,鸡翁、鸡母、鸡雏各几何?
思路:
计算机解决此类问题采用的是“穷举法”。
穷举法的基本原理是,根据已知条件,在给定的范围内对所有可能的答案按某种顺序进行逐一枚举和检验,从中找出那些符合要求的答案。
穷举法的关键是列举所有可能的情况并进行条件判断,可以用循环结构来实现。
1 #include <stdio.h> 2 3 int main() 4 { 5 int x = 0, y = 0, z = 0, j=1; // x, y, z 分别表示公鸡cock、母鸡hen、和鸡仔chicken个数 6 7 for (int x = 0; x <= 100; x++) 8 { 9 for (int y = 0; y <= 100; y++) 10 { 11 for (int z = 0; z <= 100; z++) 12 { 13 if (x + y + z == 100 && 5 * x + 3 * y + z / 3 == 100) 14 { 15 printf("解%d:公鸡个数为:%d,母鸡个数为:%d,鸡仔个数为:%d ", j++, x, y, z); 16 } 17 } 18 } 19 } 20 return 0; 21 }
Note:如果要把 x+y+z 和 5*x+3*y+z/3 这两个表达式赋值给变量,要在最内层循环内部进行赋值。
1 #include <stdio.h> 2 3 int main() 4 { 5 int x = 0, y = 0, z = 0, j = 1; // x, y, z 分别表示公鸡cock、母鸡hen、和鸡仔chicken个数 6 int sum, chick; 7 for (int x = 0; x <= 100; x++) 8 { 9 for (int y = 0; y <= 100; y++) 10 { 11 for (int z = 0; z <= 100; z++) 12 { 13 sum = x + y + z; 14 chick = 5 * x + 3 * y + z / 3; 15 if ( sum == 100 && chick == 100) 16 { 17 printf("解%d:公鸡个数为:%d,母鸡个数为:%d,鸡仔个数为:%d ", j++, x, y, z); 18 } 19 } 20 } 21 } 22 return 0; 23 }