[题]P1150 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个烟蒂就不会进行交换

代码

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

cpp 复制代码
#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; 
}
相关推荐
沐雪轻挽萤10 分钟前
17. C++17新特性-并行算法 (Parallel Algorithms)
java·开发语言·c++
A7bert77717 分钟前
【YOLOv8部署至RDK X5】模型训练→转换bin→Sunrise 5部署
c++·人工智能·python·深度学习·yolo·机器学习
EllinY1 小时前
扩展欧几里得算法 exgcd 详解
c++·笔记·数学·算法·exgcd
量子炒饭大师1 小时前
【C++11】RAII 义体加装指南 ——【包装器 与 异常】C++11中什么是包装器?有哪些包装器?C++常见异常有哪些?(附带完整代码讲解)
开发语言·c++·c++11·异常·包装器
炘爚1 小时前
深入解析内存分区:程序运行的秘密
c++
网域小星球2 小时前
C++ 从 0 入门(五)|C++ 面试必知:静态成员、友元、const 成员(高频考点)
开发语言·c++·面试·静态成员·友元函数
|_⊙2 小时前
C++11 右值引用
开发语言·c++
李昊哲小课2 小时前
WSL Ubuntu 24.04 GPU 加速环境完整安装指南
c++·pytorch·深度学习·ubuntu·cuda·tensorflow2
Byte不洛2 小时前
C++继承详解(菱形继承与虚拟继承)
c++·继承·面向对象·菱形继承·虚拟继承
闻缺陷则喜何志丹2 小时前
【排序 离散化 二维前缀和】 P7149 [USACO20DEC] Rectangular Pasture S|普及+
c++·算法·排序·离散化·二维前缀和