top1编程
← 返回题目
题解

【入门】购买贺年卡

1 条题解

  • 0
    @ 2026-7-28 23:25:41
    #include<bits/stdc++.h>
    using namespace std;
    
    struct sp {
        int dj, sl;
    }a[1005];
    
    bool cmp(sp a,sp b){
        if(a.dj < b.dj){
            return true;
        }else{
            return false;
        }
    }
    
    int main() {
        int m,n;
        cin>>m>>n;
        for(int i=1;i<=n;i++){
            cin>>a[i].dj>>a[i].sl; // 原代码写成了a[i].dl,与结构体成员名sl不一致
        }
        sort(a+1, a+n+1, cmp);     // 原代码误用循环变量i,改为正确的数组起始地址a+1
        int s=0;
        int c=0;
        for(int i=1;i<=n;i++){
            s += a[i].dj * a[i].sl;
            c += a[i].sl;
            if(c >= m){
                s -= (c - m) * a[i].dj;
                break;
            }
        }
        cout << s << endl;         // 原代码输出的是n,改为输出计算出的最少花费s
        return 0;
    }
    
    • 1