VIRTUALS

the virtual labs for the virtuals

0%

HJ22. 汽水瓶

摘要:
简单模拟题。

题目

描述
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是 $5$ 瓶,方法如下:先用 $9$ 个空瓶子换 $3$ 瓶汽水,喝掉 $3$ 瓶满的,喝完以后 $4$ 个空瓶子,用 $3$ 个再换一瓶,喝掉这瓶满的,这时候剩 $2$ 个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用 $3$ 个空瓶子换一瓶满的还给老板。如果小张手上有 $n$ 个空汽水瓶,最多可以换多少瓶汽水喝?

输入描述:
输入文件最多包含 $10$ 组测试数据,每个数据占一行,仅包含一个正整数 $n$($1<=n<=100$),表示小张手上的空汽水瓶数。$n=0$ 表示输入结束,你的程序不应当处理这一行。

输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出 $0$。

示例1

输入:
3
10
81
0

输出:
1
5
40

简单模拟

直接模拟过程即可,需要注意的是最终的到 $2$ 个空瓶的时候,还可以获得一瓶。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* author: etoa
* code at: 2021-08-20 11:38:58
**/
#include <bits/stdc++.h>

using namespace std;

int main()
{
int n;
for (; cin >> n; ) {
if (!n) break;
int res = 0;
for (; n > 2;) {
int bottle = n / 3;
res += bottle;
n %= 3;
n += bottle;
}
cout << (n == 2 ? res + 1 : res) << endl;
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/** 
* author: etoa
* code at: 2021-08-20 13:12:26
**/
import java.util.*;

public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
for (; in.hasNext();) {
int n = in.nextInt();
if (n == 0) break;
int res = 0;
for (; n > 2;) {
int bottle = n / 3;
n %= 3;
n += bottle;
res += bottle;
}
if (n == 2) System.out.println(res + 1);
else System.out.println(res);
}
}
}

原题链接: HJ22. 汽水瓶