90分,第三点,求解

P1150 Peter 的烟

杨明皓 @ 2020-07-17 18:36:41

#include<bits/stdc++.h>

using namespace std;

int main()

{

    long int n,k,num,f,sum,a;

    cin>>n>>k;

    sum=n;

    num=n;

    f=k;

    while(f>=k)

    {

        a=num%k;

        num/=k;

        sum+=num;

        f=num;

        if(f+a==k)

        {

            sum++;

        }

    }

    cout<<sum<<endl;

    return 0;
   }

90分,第三个点错了,为什么啊


by SHOJYS @ 2020-07-17 19:10:06

@杨明皓 你的这行代码没有考虑到n与k为倍数关系时小部分情况。比如:100 10 AC:111,你的:112。9 3 AC:13 你的:14。第三个测试点10 2 AC:19 你的:18。数据量再大一点:9999999 3 AC:14999998 你的:14999993


by SHOJYS @ 2020-07-17 19:14:43

还有你可以换一种思路来试一试。毕竟我的那种思路只创建了3个变量,操作也比较简单


by 杨明皓 @ 2020-07-18 21:38:01

@ SHOJYS 谢谢!!!!!!


by liyuhangyyds @ 2020-08-22 10:19:39

这道题目其实没有很多陷阱,只有一个问题就是Peter换来的烟剩下的烟蒂同样也可以换烟。

举个例子:10支烟抽完后会剩下10个烟蒂然后每三个可以换一支烟。那么可以换来3支烟 还剩下1个烟蒂。3支烟剩下的烟蒂又会换来1支烟还剩下1个烟蒂。

说以输入10 3;

就会输出14

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,k,ans=0,yds=0;
    cin>>n>>k;
    while(n!=0)
    {
    ans++;
    n--;
    yds++;
    if(yds==k){n++;yds=0;}
    }
    cout<<ans;
}

by yifeng16 @ 2020-09-01 19:22:23

这道题不是很难


|