You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中如何修正数组比较逻辑解决最大薯片购买量问题

问题背景

一家杂货店有N种不同类型的薯片,Chris希望用手中的M美元购买尽可能多的薯片,需帮忙计算他最多能买的薯片数量。

输入输出格式
  • 输入格式:输入以测试用例数T开头,每个测试用例包含两个整数N和M,第二行是N个整数,表示第i种薯片的单价,每种薯片供应不限。
  • 输出格式:输出以“Case #X: ”开头(X为从1开始的测试用例编号),后跟最多可购买的薯片数量。
约束条件
  • 1 ≤ T ≤ 100
  • 1 ≤ N ≤ 10000
  • 1 ≤ M ≤ 10^9
  • 单价范围为1到10^6
样例输入输出

输入

6
4 5
1 2 3 4
3 3
5 5 5
3 2
1 1 1
10 5
1 1 1 1 1 2 2 2 2 2
6 2
1 2 3 6 5 4
1 5
1

输出

Case #1: 5
Case #2: 0
Case #3: 2
Case #4: 5
Case #5: 2
Case #6: 5
我的代码与问题
#include <stdio.h>

int main()
{
    int t;
    scanf("%d", &t);
    
    for(int i = 1; i <= t; i++)
    {
        long long int n, m;
        scanf("%lld %lld", &n, &m);
        int chips[n];
        
        for(int j = 0; j < n; j++)
        {
            scanf("%d", &chips[j]);
        }
        
        if(m > chips[n - 1])
        {
            printf("Case #%d: %lld\n", i, m);
        }
        else if(m < chips[n - 1])
        {
            printf("Case #%d: 0\n", i);
        }
    }
    
    return 0;
}

我在if else判断部分出错,错误地将M与数组最后一个元素比较,我认为需逐个将M与数组元素比较,但不知如何编写对应语法,请求指导该问题的正确if else语句写法。


解决方案

要买到最多的薯片,核心逻辑是选择单价最低的薯片——相同预算下,单价越低能买的数量越多。不需要逐个比较M和每个元素,而是先找出数组中的最小单价,再计算数量:

  1. 遍历所有单价,找到其中的最小值min_price
  2. 如果min_price > M,说明买不起任何薯片,输出0
  3. 否则,用M / min_price得到最多能购买的数量

修改后的代码如下:

#include <stdio.h>
#include <limits.h> // 用于INT_MAX初始化最小单价

int main()
{
    int t;
    scanf("%d", &t);
    
    for(int i = 1; i <= t; i++)
    {
        long long int n, m;
        scanf("%lld %lld", &n, &m);
        int min_price = INT_MAX; // 初始化最小单价为整数最大值
        
        // 读取单价的同时记录最小值,无需存储整个数组
        for(int j = 0; j < n; j++)
        {
            int price;
            scanf("%d", &price);
            if(price < min_price)
            {
                min_price = price;
            }
        }
        
        long long count;
        if(min_price > m)
        {
            count = 0;
        }
        else
        {
            count = m / min_price;
        }
        
        printf("Case #%d: %lld\n", i, count);
    }
    
    return 0;
}

代码说明

  • 读取单价时直接更新最小值,无需额外存储整个数组,节省内存(尤其当N=10000时)
  • 用INT_MAX初始化最小单价,确保第一个读取的单价会替换初始值
  • 用long long存储购买数量,避免M为1e9这类大值时,除以小单价导致整数溢出

内容的提问来源于stack exchange,提问作者Darwin Leonard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 01:15:46