2018/1/13 19:01:52当前位置推荐好文程序员浏览文章

题目

http://oj.jzxx.net/problem.php?id=1877

解法一

分析

(1)n <= k时,需要烤2次。
(2)n > k时,分两种情况:
① 2n能被k整除,需要烤2n / k次。
② 2n不能被k整除,余数必然为1~k-1之间的一个数,需要烤2n / k + 1次。

代码

#include <iostream>using namespace std;int main(){    int n, k;    cin >> n >> k;    if(n <= k)    {        cout << 2;    }    else    {        if(2  n % k)        {            cout << n  2 / k + 1;        }        else        {            cout << n  2 / k;        }    }    return 0;}

解法二

分析

在解法一的基础上,咱们可以进一步简化。
① 2n能被k整除,则有2n / k = (2n - 1) /k + 1
② 2n不能被k整除,则有2n / k + 1 = (2n - 1) / k + 1
这里2n / k的商等于(2n - 1)/k的商,但余数不相同。
2n / k的余数范围为(1, k - 1),(2n - 1) / k的余数范围为(0, k - 2)

综上,n > k时,无论2n能不能被k整除,都需要烤(2n - 1) / k + 1次。

代码

#include <iostream>using namespace std;int main(){    int n, k;    cin >> n >> k;    if(n <= k)    {        cout << 2;    }    else    {        cout << (2 n - 1) / k + 1;    }    return 0;}
网友评论