两道有趣的编程题怎么做

时间:2025-01-25 14:53:38 游戏攻略

题目一:抓交通肇事犯

问题描述

一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征:

甲说:牌照的前两位数字是相同的。

乙说:牌照的后两位数字是相同的,但与前两位不同。

丙是数学家,他说:四位的车号恰好是一个整数的平方。

请根据以上线索求出车号。

问题剖析与算法设计

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;

}

```

这两道题目不仅有趣,而且能够锻炼编程能力和逻辑思维。希望你能从中获得乐趣和挑战!