c语言入门级20行代码(C语言每日一练28多喝汽水)
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
冰峰不错呦
思路这套题目主要思路就是递归法,简单来说可以分为以下三种情况:
- 若空瓶子数小于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语言每日一练27——自定义函数获取最大公约数与最小公倍数
C语言每日一练26——金子装载最优值
C语言每日一练25——求最大连续递增数字串
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com