7-136 n马n担问题
有n匹马,驮n担货,大马驮3担,中马驮2担,两匹小马驮1担,问有大、中、小马各多少匹? (某种马的数量可以为0)
输入格式:
测试数据由多组,处理到文件尾。每组测试输入一个正整数n(8≤n≤1000)。
输出格式:
对于每组测试,逐行输出所有符合要求的大、中、小马的匹数。要求按大马数从小到大的顺序输出,每两个数字之间留一个空格。
输入样例:
20
输出样例:
1 5 14 4 0 16
#include <stdio.h>
int main() {
int x, y, z, n = 0;
while (scanf("%d", &n) != EOF) {
for (x = 0; x <= n; x++) {
for (y = 0; y <= n; y++) {
for (z = 0; z <= n; z++) {
if (x * 3 + y * 2 + 0.5 * z == n && x + y + z == n) {
printf("%d %d %d\n", x, y, z);
}
}
}
}
}
return 0;
}
思路
- 一共有n个马,那我们就假设每个马最少0最多n,三个循环,得到每种情况
- 只要满足if这个条件即题目要求,就输出
- 但如果题目真的给1000应该会运行超时,但题目测试用例没有给到1000,所以本题可以通过
- 本题还有一些更优解,读者可以自行思考一下如何降低时间复杂度