题目一:抓交通肇事犯
问题描述:
一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征:
甲说:牌照的前两位数字是相同的。
乙说:牌照的后两位数字是相同的,但与前两位不同。
丙是数学家,他说:四位的车号恰好是一个整数的平方。
请根据以上线索求出车号。
问题剖析与算法设计:
1. 构造一个前两位数相同、后两位数相同且相互间又不同的整数。
2. 判断该整数是否是另一个整数的平方。
参考代码:
```cpp
include include int main() { for (int i = 1; i <= 9; i++) { // i: 车号前二位的取值 for (int j = 0; j <= 9; j++) { // j: 车号后二位的取值 if (i != j) { // 断定二位数字是否相异 int k = i * 1000 + i * 100 + j * 10 + j; // 计算出可能的整数 for (int c = 31; c * c <= k; c++) { // 断定该数是否为另一整数的平方 if (c * c == k) { std::cout << "Car No. is "<< k << std::endl; break; } } } } } return 0; } ``` 题目二:百钱买百鸡问题 问题描述: 中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”: 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何? 问题剖析与算法设计: 设鸡翁、鸡母、鸡雏的个数分别为 x, y, z,题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然 x 的值在0~20之间;同理,y 的取值范围在0~33之间,可得到下面不定方程: 5x + 3y + z/3 = 100 x + y + z = 100 所以此问题可归结为求这个不定方程的整数解。 参考代码: ```cpp include int main() { for (int x = 0; x <= 20; x++) { // 外层循环控制鸡翁数 for (int y = 0; y <= 33; y++) { // 内层循环控制鸡母数 int z = 100 - x - y; if (5 * x + 3 * y + z / 3 == 100 && x + y + z == 100) { std::cout << "Chicken Master: "<< x << ", Chicken Mother: "<< y << ", Chicken Chicks: "<< z << std::endl; } } } return 0; } ``` 这两道题目不仅有趣,而且能够锻炼编程能力和逻辑思维。希望你能从中获得乐趣和挑战!