欢迎光临
我们一直在努力

GESP 23年3月2级 百鸡问题

【题目链接】

一本通 4004 百鸡问题

洛谷 B3837 百鸡问题


【题目考点】

1. 循环结构(嵌套); 2. 枚举法;


【解题逻辑】

1. 明确约束条件:

  • 总金额为 n 元,总购买数量为 m 只鸡;
  • 公鸡单价 x 元 / 只,母鸡单价 y 元 / 只,
  • z 只小鸡 1 元(即小鸡单价为 1/z 元 / 只,且小鸡数量必须是 z 的整数倍);

2. 枚举法穷举所有可能的购买组合:

  • 先枚举公鸡的购买数量 a(范围:0~m,因最多买 m 只鸡);
  • 再枚举母鸡的购买数量 b(范围:0~m-a,保证公鸡 + 母鸡数量不超过 m);
  • 小鸡数量 c 由总数量得知:c = m – a – b(保证 a+b+c=m);

3. 验证组合是否符合要求:

  • 购买的组合总价需要等于n元    ;
  • 小鸡的数量必须是z的倍数(满足z只1元的计价);

【题解代码】

1. 输入 5 个整数,分别表示:公鸡单价 x 元、母鸡单价 y 元、z 只小鸡 1 元、总金额 n 元、总购买数量 m 只;

int x,y,z,n,m;
cin>>x>>y>>z>>n>>m;// 共n元,买m只鸡

2.定义变量记录合法购买方案数,初始化为 0;

int ans=0;// 方案数 

3. 枚举公鸡、母鸡的可购买数量

// 先枚举公鸡可够买数量(最少买0只,最多买m只)
for(int a=0;a<=m;a++){ 
    // 当公鸡买了a只,枚举母鸡的可购买数量(最少买0只,最多买m-a只)
    for(int b=0;b<=m-a;b++){
        // 当母鸡买了b只,小鸡的数量 = 总数 – 公鸡数 – 母鸡数
        int c=m-a-b;
        // 验证当前组合的价格是否等于n元,小鸡的数量也必须是z的倍数
        if(a*x+b*y+c/z==n && c%z==0){
            ans++; 
        } 
    } 

4. 输出方案数

cout<<ans;

赞(0)
未经允许不得转载:171主机测评 » GESP 23年3月2级 百鸡问题
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址