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;
    }
    

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

  • 相关阅读:
    Oracle分析函数
    oracle row_number的使用
    lru缓存测试类
    注解测试类
    lucene测试类
    SVN中检出(check out) 跟导出(export) 的区别
    Lucene原理与代码分析
    Lucene入门基础教程
    linux的less命令
    day4 大纲笔记
  • 原文地址:https://www.cnblogs.com/zifeiynoip/p/11524126.html
Copyright © 2011-2022 走看看