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

题目

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

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

冰峰不错呦

思路

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

  • 若空瓶子数小于2,则不可以兑换;
  • 若空瓶子数等于2,可通过借一瓶,实现兑一瓶;
  • 若空瓶子数大于2,则可通过取模先求出目前可兑换的瓶子数,然后用求余计算剩下的空瓶子数,将兑换的瓶子数和剩下的空瓶子数相加,再递归重复以上三种情况判断。
实现代码

#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——求最大连续递增数字串

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页