c语言公鸡每只5元,母鸡每只3元,小鸡1元3只,而且鸡必须整只买。100元钱买100只鸡(每一种鸡都要有),公鸡、母鸡、小鸡各多少只?请编写程序给出各种购买方案。 输入格式: 输入为一个正整数n,表示要求输出前n种可能的方案。方案的顺序,是按照公鸡只数从少到多排列的。 输出格式: 显示前n种方案中公鸡、母鸡、小鸡各多少只。每行显示一种方案,数字之间空一格,最后一个数字后没有空格。 注意:如果全部方案不到n种,就顺序输出全部可能的方案。 输入样例: 在这里给出一组输入。例如: 5 输出样例: 在这里给出相应的输出。例如: 4 18 78 8 11 81 12 4 84
时间: 2024-02-24 17:56:53 浏览: 517
求百鸡问题 公鸡每只5元,母鸡每只3
这道题目需要枚举公鸡、母鸡、小鸡的数量,满足条件即可。我们可以用三重循环来枚举,时间复杂度为O(n^3)。但是这里我们可以用一些数学方法进行优化。
因为鸡的数量必须为整数,所以我们可以用整除运算符(/)来判断鸡的数量是否为整数。根据题目中的条件,我们可以列出以下三个方程:
公鸡数量:5x + 3y + z / 3 = 100
母鸡数量:x + 3y + z / 3 = 100
小鸡数量:z = 3n
其中,x表示公鸡的数量,y表示母鸡的数量,z表示小鸡的数量,n表示小鸡的只数。
将z的值代入前两个方程中,可以得到:
4x + 2y = 100
x + 2y = 25
因此,我们可以用两重循环,枚举x和y的值,然后计算出z的值,判断是否满足条件即可。具体代码如下:
```c
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
for (int x = 0; x <= 20; x++)
{
for (int y = 0; y <= 33; y++)
{
int z = 100 - x - y;
if (z % 3 == 0 && 5 * x + 3 * y + z / 3 == 100)
{
printf("%d %d %d\n", x, y, z);
n--;
}
if (n == 0) return 0;
}
}
return 0;
}
```
这里的时间复杂度为O(1),可以通过此题。
阅读全文