zoukankan      html  css  js  c++  java
  • 9.2练习题1.汪老师的烟 题解

    题目出处:洛谷 P1150

    题目描述

    汪老师有n根烟,他每吸完一根烟就把烟蒂保存起来,(k(k>1)) 个烟蒂可以换一个新的烟,那么 汪老师 最终能吸到多少根烟呢?

    输入格式

    每组测试数据一行包括两个整数 (n,k(1<n,k le 10^8))

    输出格式

    对于每组测试数据,输出一行包括一个整数表示最终烟的根数。

    样例输入1

    4 3
    

    样例输出1

    5
    

    样例输入2

    10 3
    

    样例输出2

    14
    

    题目分析

    这道题目是一道很基础的题目。考我们的知识点就是 循环
    我们可以开两个变量 (n)(m)(n) 用于表示当前我拥有的香烟的数量, (m) 用于表示当前我拥有的烟蒂的数量(一开始 (m = 0))。然后我们再开一个变量 (ans) 用于表示 汪老师 目前已经抽的烟的数量。
    然后我们开始进行循环,循环成立的条件是 (n gt 0) (即 汪老师 还有烟抽,如果 (n = 0) 则 汪老师 没有烟可以抽,那么我们的循环就结束了)。
    循环里面,每一次我们需要执行如下操作:

    1. (ans += n;) :这一步我首先会将我手头上的所有的烟都抽掉;
    2. (m += n;)(n) 根烟抽掉后,烟蒂的总数 (m) 会增加 (n)
    3. (n = m / k;) :每 (k) 个烟蒂可以兑换一根烟;
    4. (m \%= k;) :兑换后剩下的烟蒂的数量更新为 (m MOD k)(这里的“MOD”是模运算的意思,相当于C++里面的“%”,表示一个数被另一个数除的余数)。

    如实循环,直到汪老师没有可以抽的烟为止。
    实现代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    int n, m, k, ans;
    int main() {
        cin >> n >> k;
        while (n) {
            ans += n;
            m += n;
            n = m / k;
            m %= k;
        }
        cout << ans << endl;
        return 0;
    }
    

    另外需要注明的是,汪老师其实不抽烟,吸烟有害身体健康,大家以后也不要抽烟哈。

  • 相关阅读:
    echarts设置y轴线的样式
    echarts基础配置信息?
    提高网站用户体验使网站更好发展的五大要点
    没有或很少有出站链接的网站存在致命的缺陷
    网络推广之百度知道推广技巧
    如何让百度3分钟内收录你的文章
    CSS强制换行
    如何提高网站在搜索引擎中的权重
    js闭包深入详解
    深入浅出之正则表达式
  • 原文地址:https://www.cnblogs.com/zifeiynoip/p/11524126.html
Copyright © 2011-2022 走看看