[题] Peter 的烟 #数学推导

题目

P1150 Peter 的烟


题解

为什么要记录这个入门题呢
因为一个题解:博客跳转
我自己做的是模拟整个吸烟然后烟蒂换烟的过程,很笨。
这个数学推导真的震撼我
最后一个式子就搞定:n+(n-1)/(k-1)

基于该题解的我的分析过程:
n个烟蒂可以换一根烟,这根烟吸完可以获得一个烟蒂
那么在烟蒂足够的情况下,每n-1个烟蒂就是一根烟
数学式表示为:n烟蒂 = 1烟 + 1烟蒂 => n-1烟蒂 = 1烟
但是这个代换有一个前提:你必须在一开始就有n个烟蒂
所以,重申一遍:烟蒂满足n个的情况下,每n-1个烟蒂就是一根烟
比如我每6个烟蒂才能换一根烟时,按照上面的推导我可以5个烟蒂换一根烟
但是我最后剩下的5个烟蒂还能这样换吗?显然不能。
所以我们一开始就将烟蒂总数减去1,使得最后的n-1个烟蒂变为n-2个
这个操作对前面的烟蒂是不会有影响的,前面的烟蒂会正常地被换掉
这样最后要是剩下n-1个烟蒂就不会进行交换


代码

我按照模拟吸烟的思路写的,能过。

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n, k, sum;
	cin >> n >> k;
	sum = n;//原有的肯定会吸完 
	while(n >= k){//n此时代表的是烟蒂的数量
		int y = n / k;//换来y根烟 
		n %= k;//还剩下n个烟蒂 
		sum += y;
		n += y;//y根烟吸完后又来y个烟蒂 
	}
	cout << sum;
	return 0; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值