这是一道以数学问题为背景下的编程问题,对于小白来说可能不好下手,本题主要以思路为主,体现如何把数学思维转化为编程思维,把数学算法转化为编程算法。
3个可乐瓶可以换一瓶可乐,喝的可乐总数就等于喝的加换的,开始有364瓶可乐,我们要从最初的条件入手,摆脱数学想一步求一步的思想,一切以最初条件为着手点,去推演适合编程的普遍规律。
第一次换:
喝的总数: 喝 + 换
364 + 364/3
此时剩的空瓶有: 换过喝的 + 没凑上换的
364/3 + 364%3
第二次换:
喝的总数: 第一次喝的 + 第一次空瓶换的
(364 + 364/3) + (364/3 + 364%3)/3
此时剩的空瓶有: 第一次剩下的空瓶/3 + 第一次剩下的空瓶%3
(364/3 + 364%3)/3 + (364/3 + 364%3)%3
此时根据前两次的规律,我们已经不难发现规律了,现在思考控制循环的条件,每3个可乐瓶可以换1瓶可乐,当空的可乐瓶不足3瓶时,就没法再换了,所以循环的条件就是空瓶>=3。
以C#代码为例实现上述算法:
一开始有364瓶可乐,所以int pingNumber = 364;
喝的可乐数记为heNumber,由于364瓶可乐要全部喝掉,所以heNumber初值为364,
即int heNumber = 364;
只要瓶子的数量>=3,就可以兑换一瓶可乐,所以进入循环的条件是pingNumber>=3
整体代码如下:
int pingNumber = 364;
int heNumber = pingNumber;
while (pingNumber > 2)
{
heNumber += pingNumber / 3;
pingNumber = pingNumber/3+pingNumber%3;
}
Console.WriteLine("一共能喝"+heNumber+"瓶可乐,还剩"+pingNumber%3+"个空瓶");
所以解这种题如果一开始不是明确地知道思路的话,建议把原始数据代入每一步计算都列出来(而不是想一步算一步,那样只能得到每一步具体的结果,对整体解题帮助不大),用数学归纳的思想去寻找普通规律,把数学思维转化为编程思维,这样编程之路才会越走越远。
标签:heNumber,编程,pingNumber,空瓶,364,可乐 From: https://blog.51cto.com/u_15794567/7701722