Halo

A magic place for coding

0%

CCF-- 打酱油问题

打酱油问题

问题描述

  小明带着 N 元钱去买酱油。酱油 10 块钱一瓶,商家进行促销,每买 3 瓶送 1 瓶,或者每买 5 瓶送 2 瓶。请问小明最多可以得到多少瓶酱油。

输入格式

输入的第一行包含一个整数 N,表示小明可用于买酱油的钱数。N 是 10 的整数倍,N 不超过 300。

输出格式

输出一个整数,表示小明最多可以得到多少瓶酱油。

样例输入

40

样例输出

5

样例说明

把 40 元分成 30 元和 10 元,分别买 3 瓶和 1 瓶,其中 3 瓶送 1 瓶,共得到 5 瓶。

样例输入

80

样例输出

11

样例说明

把 80 元分成 30 元和 50 元,分别买 3 瓶和 5 瓶,其中 3 瓶送 1 瓶,5 瓶送 2 瓶,共得到 11 瓶。

解决方法

分析

通过分析题目,可以知道有四种购买的类型:

  • 当 N<10 的时候,无法购买
  • 当 10≤N<30,购买 1 瓶
  • 当 30≤N≤50, 购买 3 瓶,并赠送 1 瓶,共得 4 瓶
  • 当 50≤N, 购买 5 瓶,并赠送 2 瓶,共得 7 瓶

因此,从第四种方法依次优先往上选择,才能尽可能多地购买到酱油。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;

int main() {
int N;
cin >> N;

int num = 0;
while (N >= 50) {
N -= 50;
num += 7;
}
while (N >= 30) {
N -= 30;
num += 4;
}
while (N >= 10) {
N -= 10;
num++;
}
cout << num << endl;

return 0;
}

至此,本题讲解完毕,谢谢!

Welcome to my other publishing channels