反复计算的问题
有这么道题目:在自动贩卖机里卖巧克力派,1块钱一个,每个巧克力派里面都有一张优惠卷,凑够7个优惠卷换一个巧克力派,问N块钱,可以买+换多少巧克力派,并剩下几张优惠卷。 例如: 输入:20 输出:巧克力:23 优惠卷:2 程序代码如下:
有这么道题目:在自动贩卖机里卖巧克力派,1块钱一个,每个巧克力派里面都有一张优惠卷,凑够7个优惠卷换一个巧克力派,问N块钱,可以买+换多少巧克力派,并剩下几张优惠卷。
例如:
输入:20
输出:巧克力:23 优惠卷:2
程序代码如下:
\
#include <stdio.h>
int main()
{
int qian,quan,total;
int i=0;
scanf("%d",&qian);
total=qian;
quan=qian;
while((int)(quan/7))
{
total+=quan/7;
quan=quan%7+quan/7;
}
printf("巧克力:%d,剩余券:%d\n",total,quan);
return 0;
}
这本来是一个狠简单的问题,不过我以前碰到一个更有意思的题目:
话说汽水一元钱一瓶,三个空瓶又可以换一瓶汽水,问现在有1000元钱,能喝多少瓶汽水呢?
哈哈,这还不简单,用上面的程序跑一下就可以了,只要把7变为3,输出格式修改一下不就OK了吗?
\
#include <stdio.h>
int main()
{
int qian,quan,total;
int i=0;
scanf("%d",&qian);
total=qian;
quan=qian;
while((int)(quan/3))
{
total+=quan/3;
quan=quan%3+quan/3;
}
printf("汽水:%d,剩余空瓶:%d\n",total,quan);
return 0;
}
看看运行结果:
1000
汽水:1499,剩余空瓶:2
看起来不错吧?如果你是一个汽水自动贩卖机,那么完全正确,问题的关键是还剩下两个空瓶
如果是一个精明的小商店老板,你拿两个空瓶去换一瓶汽水,理论上上你是欠他一个瓶子的,但是别忙,喝完那瓶汽水你马上给老板,这事不就搞定了吗?
所以实际上你能够喝到1500瓶汽水,并且不剩一个空瓶子
但是还没完,我们来做一道方程题目:
1瓶汽水=一个汽水瓶容量的汽水(不含瓶子)+1个空瓶
3个空瓶=1瓶汽水
现在好了,简单的两个方程联立,你就会得到:一个汽水瓶容量的汽水(不含瓶子)=2个空瓶
于是,你用1000元钱得到1000汽水和1000个空瓶子之后,
立马将1000个空瓶=500汽水
于是你得到了1500汽水
这应该是最简单的了。不过机器呢,就不知道允不允许你赊欠了。