1. 程式人生 > >喝汽水,1瓶汽水1元,2個空瓶可以換一瓶汽水, 給20元,可以多少汽水。

喝汽水,1瓶汽水1元,2個空瓶可以換一瓶汽水, 給20元,可以多少汽水。

喝汽水,1瓶汽水1元,2個空瓶可以換一瓶汽水, 
給20元,可以多少汽水。 

第一種方法:(非遞迴)

#include<stdio.h>
int main()
{
    int total = 0;        //瓶子數
    int kps = 0;          //錢數
    int ys = 0;
    printf("請輸入錢數:");
    scanf("%d", &total); 
    kps = total;
    while (kps >= 1)
    {
        kps += ys;
        total += kps / 2;
        ys = kps % 2;
        kps /= 2;
    }
    printf("能換取 %d 瓶汽水\n", total);
    return 0;
}

第二種方法:(遞迴)

#include <stdio.h>
#include <stdlib.h>
int buy_sode(int n)
{
	static int flag = 0;
	if((n*2 + flag) < 2)
	{
		return 0;
	}
	if(0 == n%2)
	{
		return n + buy_sode(n/2);
	}
	else if((1 == n%2) && (0 == flag))
	{
		flag = 1;
		return n + buy_sode(n/2);
	}
	else if((1 == n%2) && (1 == flag))
	{
		flag = 0;
		return n + buy_sode(n/2 + 1);
	}
	return 0;
}

int main() 
{
    int money = 0;
    printf("請輸入錢數:");
    scanf("%d", &money);
    printf("可以買 %d 瓶汽水\n", buy_sode(money));
    return 0;
}