问题描述:
一个叫做“嘻哈华”的人购买了 m 瓶饮料,卖家告诉他够 n(n>0, 且 n为整数) 个瓶盖就可兑换一瓶
饮料,并且兑换次数不限。现在问他喝了多少瓶饮料(不扔也不借)?
源代码:
#include <stdio.h>
int main() {
int m, n, s;
scanf("%d%d", &m, &n);
s = m + (m-1) / (n-1); // 最多能喝多少瓶
printf("%d\n", s);
return 0;
}
// 饮料兑换问题
//
// 创作者:嘻哈华 @版权所有,翻版必究。若想使用请下载并导入 wyh.h 这个包。
//
// 根据(购买数,兑换数)推导出,在购买 m (购买数)瓶饮料的情况下,
// 够 n (兑换数)个瓶盖(空瓶子)就可兑换一瓶饮料。最多兑换数就相当
// 于 (m-1)/(n-1)。 (购买数-1)/(兑换数-1),这个公式的取值结果是:
// 取小于这个值得最大整数。
活动兑换问题进阶版:
问题描述:现在购买 m 瓶饮料,4瓶盖 ——>1瓶,2空瓶 ——> 1瓶。问:最多喝了多少瓶饮料?
#include <stdio.h>
int main() {
int m, n=5, s=5;
scanf("%d", &m);
while (m>=4 || n>=2) {
int t = (m-1) / 3;
if (m >= 4) {
s += t;
m -= 3*t;
n += t;
}
if (n >= 2) {
s += n-1;
m += n-1;
n = 1;
}
}
printf("%d\n", s);
return 0;
}