1. 题目内容
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水?(编程实现)。
2. 思路分析
2.1 方法一
思路:
- 20元首先可以喝20瓶,此时手中有20个空瓶子。
- 两个空瓶子可以喝一瓶,喝完之后,空瓶子剩余:empty/2(两个空瓶子换的喝完后产生的瓶子) + empty%2(不够换的瓶子)。
3. 如果瓶子个数超过1个,可以继续换,即重复2。
2.2 方法二
按照上述喝水和用瓶子换的规则的话,可以发现,其实就是个等差数列:money*2-1
2.3 方法三
因为每两个空瓶可以换一瓶汽水,1瓶汽水1元,最开始给20元。
我们就用钱数money设置一个while循环,当钱数money不等于0时,每买一瓶汽水,就让能喝的汽水total+1,同时money-1。
因为两个空瓶可以换一瓶汽水,所以当total为偶数时,total就再+1即可。
3. 代码实现
3.1 方法一
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int total = 0;
int empty = 0;
int money = 0;
scanf("%d", &money);
total += money;
empty += money ;
while (empty >= 2)
{
total += empty / 2;
empty = empty/2 + empty % 2;
}
printf("可以喝%d瓶汽水\n", total);
return 0;
}
3.2 方法二
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int total = 0;
int empty = 0;
int money = 0;
scanf("%d", &money);
if (money > 0)
total = money * 2 - 1;
printf("可以喝%d瓶汽水\n", total);
return 0;
}
3.3 方法三
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int total = 0;
int money = 0;
scanf("%d", &money);
while (money != 0)
{
total++;
money--;
if (total % 2 == 0)
total++;
}
printf("可以喝%d瓶汽水\n", total);
return 0;
}