首页 > 试题广场 >

小红的优惠券

[编程题]小红的优惠券
  • 热度指数: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 元。
package main

import (
    "fmt"
)

func main() {
    n, m := 0,0
    fmt.Scan(&n, &m)

    if m == 0 || n == 0 {
        fmt.Println(n)
        return
    }

    yhqs := [][2]int{}
    for {
        aj,bj := 0,0
        n, _ := fmt.Scan(&aj, &bj)
        if n == 0 {
            break
        }

        yhq := [2]int{aj, bj}
        yhqs = append(yhqs, yhq)

    }
    // fmt.Println(n, m, yhqs)

    min := n // 最低价
    for _, v := range yhqs {
        yhj := n // 当前优惠券的优惠价
        if n >= v[0] {
            yhj -= v[1]
        }
        if min > yhj {
            min = yhj
        }
    }

    fmt.Println(min)
}

发表于 2025-09-02 10:08:57 回复(0)