题目

有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?

c语言入门级20行代码(C语言每日一练28多喝汽水)(1)

冰峰不错呦

思路

这套题目主要思路就是递归法,简单来说可以分为以下三种情况:

实现代码

#include <stdio.h> #include <stdlib.h> #include <math.h> int bottles= 0; int GetSodaBottles(int i) { int rest; int temp; if (i <= 1) { return bottles; } if (i == 2) { bottles = 1; return bottles; } if (i >= 3) { rest = i % 3; temp = i / 3; bottles = temp; rest = temp; GetSodaBottles(rest); } } void main() { int a[10]; int ArrNum = 0; printf("Input the number of bottles:\n"); while (scanf("%d", &a[ArrNum]) != 0 && a[ArrNum] >= 1 && a[ArrNum] <= 100) { ArrNum ; } printf("The result:\n"); for (int j = 0; j < ArrNum; j ) { printf("%d\n", GetSodaBottles(a[j])); bottles = 0; } }

运行结果

c语言入门级20行代码(C语言每日一练28多喝汽水)(2)

往期推荐

C语言每日一练27——自定义函数获取最大公约数与最小公倍数

C语言每日一练26——金子装载最优值

C语言每日一练25——求最大连续递增数字串

,