问题描述:
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水(编程实现)。
1. 20元首先可以喝20瓶,此时手中有20个空瓶子;
2. 两个空瓶子可以喝一瓶,喝完之后,空瓶子剩余:empty/2(两个空瓶子换的喝完后产生的瓶子) + empty%2(不够换的瓶子);
3. 如果瓶子个数超过1个,可以继续换,即重复2。
代码实现:
#include <stdio.h>
int main()
{
int money = 0;
int total = 0;//总共的瓶数
int empty = 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;
}
//20
//39
或者:
#include <stdio.h>
int main()
{
int money = 0;
int total = 0;
int empty = 0;
scanf("%d", &money);
total = money;
empty = money;
while (empty > 1)
{
total += empty / 2;
empty = empty / 2 + empty % 2;
}
printf("%d\n", total);
return 0;
}
6元——可以喝11瓶;
10元——可以喝19瓶;
20元——可以喝39瓶;
经过找规律发现,可以实现代码为:
#include <stdio.h>
int main()
{
int money = 0;
int total = 0;
int empty = 0;
scanf("%d", &money);
if (money <= 0)
{
total = 0;
}
else
{
total = money * 2 - 1;
}
printf("%d\n", total);
return 0;
}
//20
//39