题目说明:
小明有x个饮料瓶,每三个瓶盖可以去兑换一个饮料(并不允许赊账),问最多可以有多少瓶饮料(包括已有的x瓶)?
样例输入:
100
101
样例输出:
149
151
答案提交:只需算出结果并提交即可,本题的结果为一个整数,提交答案时仅需填写这个整数。
题目解析:
1.循环解法
一共有x瓶,设总和sum,sum值等于x,当x减三时,sum加一,直到x的值小于3。
代码实现:
include <iostream>
using namespace std;
int main() {
int bottle=0,sum=0;
cin>>bottle;
sum=bottle;
while(bottle>=3){
bottle=bottle-3;
bottle=bottle+1;
sum+=1;
}
cout<<sum<<endl;
return 0;
}
2.数学逻辑
我们用循环解法看这道题时发现,每三瓶能换一瓶,用100瓶举例:
100-3=97,97+1=98
98-3=95,95+1=96
.............. ...............
依次类推,我们可以看到每一次“交易”都是少了三瓶,多了一瓶,故可列公式为
sum=sum+(x/2);
但是,当我们减到最后两瓶时,两瓶不能换一瓶,于是再将 sum-1,得出公式
sum=sum+(x/2)-1;
但是,再去看101瓶,101/2=50,余1瓶,又从上个式子sum=sum+(x/2)-1可知当100瓶换完后有两瓶余出,再加上101%2的一瓶,可列公式为
sum=sum+(x/2)-1+1; 一式
化简:sum=sum+(x/2); 二式
我们可以用其他的值来代入,发现当瓶数为偶数时,瓶盖数会余二,当瓶数为奇数时刚好换完。
代码实现:
#include <iostream>
using namespace std;
int main(){
int bottle;
cin>>bottle;
if ( bottle % 2 == 0 ) bottle += ( bottle / 2 ) - 1;
else bottle += bottle / 2;
cout<<bottle;
}
感谢 观看!!!