考研机试真题--百鸡问题--哈尔滨工业大学

针对一个经典的数学问题,使用C++编程求解在预算限制下购买不同价格的鸡的组合方案。通过优化算法提高求解效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述
用小于等于n元去买100只鸡,大鸡5元/只,小鸡3元/只,还有1/3元每只的一种小鸡,分别记为x只,y只,z只。编程求解x,y,z所有可能解。
输入描述:
测试数据有多组,输入n。
输出描述:
对于每组输入,请输出x,y,z所有可行解,按照x,y,z依次增大的顺序输出。
示例1
输入
40
输出
x=0,y=0,z=100
x=0,y=1,z=99
x=0,y=2,z=98
x=1,y=0,z=99

链接:
https://www.nowcoder.com/practice/01d161052db64c249a47fc723b4fd5db?tpId=40&tqId=21487&tPage=1&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking

代码:
一开始写的代码…这个代码有点弱….

#include <iostream>
#include <fstream>
using namespace std;

int main(){
    int x, y, z;
    int n;
    while(cin >> n){
        int maxn = 3 * n;
        float sum = 0.0;
        for(x = 0; x < maxn; ++x){
            for(y = 0; y < maxn; ++y){
                for(z = 0; z < maxn; ++z){
                    if(x + y + z == 100){
                        sum = 5 * x + 3 * y + 1.0 / 3.0 * z;
                        if(sum <= n){
                            printf("x=%d,y=%d,z=%d\n", x, y, z);
                        }
                    }
                }
            }
        }
    }
    return 0;
}

改进后:

#include <iostream>
#include <fstream>
using namespace std;
const int num = 100;

int main(){
    int x, y, z, n;
    while(cin >> n){
        for(x = 0; x < num; ++x){
            for(y = 0; y < num - x; ++y){
                z = num - x - y;
                if(15 * x + 9 * y + 1 * z <= 3 * n){ //不等式两边同乘3,解决小数问题
                    printf("x=%d,y=%d,z=%d\n", x, y, z);
                }
            }
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值