某商店规定:三个空汽水瓶可以换一瓶汽水,允许向老板借空汽水瓶(但是必须要归还)。小张手上有n个空汽水瓶,她想知道自己最多可以喝到多少瓶汽水。
输入文件最多包含 10 组测试数据,每个数据占一行,仅包含一个正整数 n( 1<=n<=100 ),表示小张手上的空汽水瓶数。n=0 表示输入结束,你的程序不应当处理这一行。
输入例子:
3 10 81 0
输出例子:
1 5 40
例子说明:
样例 1 解释:用三个空瓶换一瓶汽水,剩一个空瓶无法继续交换 样例 2 解释:用九个空瓶换三瓶汽水,剩四个空瓶再用三个空瓶换一瓶汽水,剩两个空瓶,向老板借一个空瓶再用三个空瓶换一瓶汽水喝完得一个空瓶还给老板
#include <iostream>
using namespace std;
int main() {
int n;
while (cin >> n) {
int num = 0;
int result = 0;
if (n != 0) {
num = n;
while (true) {
result += num / 3;
num = num / 3 + num % 3;
// cout << num <<endl;
if (num <= 3) {
if (num >= 2) {
result++;
}
break;
}
}
cout << result <<endl;
} else {
break;
}
}
return 0;
}
动态规划的简便算法
#include <iostream>
using namespace std;
int dfs(int n ){
if(n == 1){
return 0;
}
if(n == 2){
return 1;
}
return dfs(n - 2) + 1;
}
int main() {
int n;
while (cin >> n) {
if(n != 0){
cout<<dfs(n)<<endl;
}
else{
break;
}
}
return 0;
}