P1150 Peter 的烟

题目背景

温馨提醒:吸烟有害健康,请勿尝试吸烟!

题目描述

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

与某些脑筋急转弯不同的是,Peter 并不能从异次元借到烟蒂,抽完后再还回去。

输入格式

每组测试数据一行包括两个整数 �,�n,k(1<�,�≤1081<n,k≤108)。

输出格式

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

输入输出样例

输入 #1

4 3

输出 #1

5

输入 #2

10 3

输出 #2

14

想法

首先我们要清楚要求peter共用了几支烟

a为拥有 b为用多少可以换一个

我们可以列一个短式

a+a/b=吸的烟总数(max)

设a为10 b为3

那max为10+10/3

而结果要求整数

就可以先这样

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    int max=0;
    max=a+max;
}

剩下便是求a/b的整数了

可以利用a/=b来计算结果

理论成立 直接出题解

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    int max=0;
    max=a+max;
    a/=b;
    max=max+a;
    cout<<max;
}

可是这样还会报错

优化一下就会发现

peter抽完烟后兑换烟 就会有一些没换

例如10 3

10+3=13

还有4个没有换  再次优化一下

if(a>=b){
        a/=b;
        max=max+a;
    }

ok 加入原来的式子

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    int max=0;
    max=a+max;
    a/=b;
    max=max+a;
    if(a>=b){
        a/=b;
        max=max+a;
    }
    cout<<max;
}

这个还是有问题 太大不能解 换一种解法

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,max=0,s=0;
    cin>>a>>b;//输入
    max=a;//复制a的值等于之前那个max=max+a
    s=a;//这也是复制
    while(s>=b)//s这里为a a要是小于b就无法再换
    {
        s-=b;//每换一次max的值+1
        max++;
        s++;//换一次后烟蒂数量+1
    }
    cout<<max;
    return 0;
}

还是应该用循环来做 我大意了 用的除法 应该用枚举来用加减

这道题还是非常简单 

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值