问题:
一瓶啤酒2块,两个瓶盖送一瓶,四个空瓶换一瓶。20元一共可以喝几瓶?
思路:
啤酒,对我们有用的属性就是瓶盖和空瓶,10瓶啤酒可以考虑分别计算瓶盖和空瓶所得瓶数,再求和即可!
代码如下:
#include <stdio.h>
#include <stdlib.h>
#define MONEY 20
unsigned int compute_fun(unsigned int m,unsigned int n)
{
unsigned int res = 0;
unsigned int temp=m;
while(temp != 0)
{
temp /= n;
res += temp;
}
return res;
}
unsigned int recu_fun(unsigned int m,unsigned int n)
{
unsigned int val= m;
unsigned int res = 0;
while(val !=0)
{
val= compute_fun(val,n);
res += val;
}
return res;
}
int main(int argc, char* argv[])
{
unsigned int beernum = 0;
unsigned int t1 = 0,t2 = 0;
beernum = MONEY/2;
t1 = recu_fun(beernum,2);
t2 = recu_fun(beernum,4);
beernum += t1;
beernum += t2;
printf("t1:%d,t2:%d beer number = %i\n",t1,t2,beernum);
getchar();
return 0;
}
运行结果: