首页 > 试题广场 >

小红的优惠券

[编程题]小红的优惠券
  • 热度指数:4354 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}小红的购物车结算金额为 n 元,她手中有 m 张优惠券。第 j 张优惠券的规则为“满 a_j 元立减 b_j 元”,即若 n\geqq a_j,则使用该券后需支付 n-b_j 元。

\hspace{15pt}小红至多使用一张优惠券,请问最少需要支付多少元?

输入描述:
\hspace{15pt}第一行输入两个整数 n,m\left(1\leqq n\leqq 10^5;\ 1\leqq m\leqq 100\right)
\hspace{15pt}接下来 m 行,第 j 行输入两个整数 a_j,b_j\left(1\leqq b_j\leqq a_j\leqq 10^5\right),描述第 j 张优惠券。


输出描述:
\hspace{15pt}输出一个整数,表示小红使用最优策略后需支付的最少金额。
示例1

输入

100 3
300 50
200 30
50 5

输出

95

说明

仅第三张券可用,支付 100-5=95 元。
***服了
import java.util.Scanner;
import java.util.TreeMap;
import java.util.TreeSet;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        TreeMap<Integer, Integer> map = new TreeMap<>();


        for (int i = 0; i < m; i++) {
            map.put(in.nextInt(), in.nextInt());
        }

        int dis = 0;


        for (int k : map.keySet()) {
            if (k > n) {
                break;
            }
            dis = Math.max(dis, map.get(k));

        }
        System.out.println(n - dis);

    }
}


发表于 2025-10-08 16:33:25 回复(0)
import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(); // 结算金额
        int m = in.nextInt(); // 卷的个数

        int[] a = new int[m];
        int[] b = new int[m];

        int ans = 1000001;

        int res = 0;

        for (int i = 0; i < m; i++) {
            a[i] = in.nextInt();
            b[i] = in.nextInt();
            if (n >= a[i]){ // 符合满减条件
                res = n - b[i];
            }else{ // 不符合
                res = n; // 优惠卷可以不用呀
            }
            ans = Math.min(ans,res);
        }
        System.out.println(ans);

    }
}

发表于 2025-09-08 12:22:42 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int amount = in.nextInt();
        int n = in.nextInt();
        int max = 0;
        while (n-- > 0) {
            int limit = in.nextInt();
            int discount = in.nextInt();
            if (limit > amount) continue;
            max = Math.max(max, discount);
        }
        System.out.println(amount - max);
    }
}

发表于 2025-09-03 13:27:38 回复(0)

import java.util.*; 
import java.io.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
        String[] line1=bf.readLine().split(" ");
        int n=Integer.parseInt(line1[0]);
        int m=Integer.parseInt(line1[1]);

        //遍历统计哪些优惠券可用,可用的优惠劵再判断其优惠金额是否最大
        int[] discount=new int[]{n,0};

        while(m>0){
            String[] line=bf.readLine().split(" ");
            int disN=Integer.parseInt(line[0]);
            int disM=Integer.parseInt(line[1]);
            if(disN<=n&&disM>discount[1]){
                discount[0]=disN;
                discount[1]=disM;
            }
            m--;
        }
        System.out.println(n-discount[1]);
    }
}

发表于 2025-09-01 23:00:53 回复(0)