题目描述
百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用100文钱买100只鸡,公鸡、母鸡、小鸡各买多少只?
本程序要求解的问题是:
输入
输入一个正整数n(n<=100)。
输出
如果有解,种组合占一行,包含公鸡、母鸡、小鸡的个数,用正整数表示,每个数据占4列。公鸡母鸡小鸡个数均大于等于0,按公鸡数目从小到大输出,公鸡数目相同按母鸡数目从小到大输出,以此类推。如果无解,输出“No Answer”。
样例输入
给定一个正整数n,用n文钱买n只鸡,问公鸡、母鸡、小鸡各买多少只?
思路:首先明白钱与鸡数量的关系,关系1.三种数量相加为n 2.三种钱相加也为n其次如果无解,应该输出“No Answer”。其次进行简化,循环的次数越少,计算的速度越快。注意小问题例如小鸡三只一文钱注意应用小数点,否则计算结果会有误差。搬砖问题方法相同
#include <stdio.h>
int main() {
int n, g, m, x;
scanf("%d", &n);
for (g = 1; g <= 20; g++)
for (m = 1; m <= 34; m++)
for (x = 1; x <= n; x++){if ((n == g * 5 + m * 3 + x / 3.0) && (n == g + m + x))
printf("%d %d %d\n", g, m, x);
else
printf("No Answer");
}
return 0;
}
该写法为错误的,错误一不应从一开始数,有存在为零的情况。
错误二,输出没有答案写法错误,未结束循环,且应用count计数来截止
正确代码为
#include <stdio.h>
int main() {
int n, g, m, x, count = 0;
scanf("%d", &n);
for (g = 0; g < n; g++)
for (m = 0; m < n; m++)
for (x = 0; x < n; x++) {
if (#include <stdio.h>
int main() {
int n, g, m, x, count = 0;
scanf("%d", &n);
for (g = 0; g < n; g++)
for (m = 0; m < n; m++)
for (x = 0; x < n; x++) {
if ((n == g *5 + m * 3 + x / 3.0 && (n == g + m + x))) {
printf("%d %d %d\n", g, m, x);
count++;
}
}
if (count == 0)
printf("Error\n");
return 0;
}
}
感谢您的观看,如果喜欢,就请按下下面的小拇指哦。