zoukankan      html  css  js  c++  java
  • 山魔

    有n 座山,每座山有南北两面。
    每一天,一些山的某一面(不一定相同) 会受到山魔的袭击。
    但是山魔一天最多只会袭击k 座山。
    当每座山的每一面都被袭击过后,山魔就会离开。
    那么至少要经过多少天,山魔会消失?
    Input
    一行两个正整数n, k。
    Output
    一个整数,表示答案。
    Examples
    devil.in devil.out
    3 2 3
    Notes
    对于所有数据,满足1 ≤ n, k ≤ 10。
    Task1[10%]
    k = 1

    Task2[50%]
    k ≤ 4
    Task3[100%]
    无特殊限制

    思路:

    这个问题其实就相当于我们小学学的“锅煎蛋”问题,给你蛋的数量n和锅的数量k,一个锅煎一面蛋要1分钟,求要几分钟可把每个蛋的两面煎完。

    此题目很简单,代码如下。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n,k;
    int main()
    {
        freopen("devil.in","r",stdin);
        freopen("devil.out","w",stdout);
        cin>>n>>k;
        if(k>=n) cout<<2<<endl;//若锅比蛋多,则可以花1min去煎每个蛋的一面,所以要用2min。 
        else cout<<ceil(n*2/k*1.0)<<endl;
        return 0;
    }

    证明:

    若n为k的倍数,则毋庸置疑,ans=n*2/k;

    若n>2*k,则可以把n减去s倍的k,使n<2*k(n=2*k时就变成上面的式子了)然后ans+=s*2;

    这时候我们定义x=n-s*k。

    再花1min煎x个蛋,花1min煎后x个蛋的另一面,ans+=2,所以剩下(n-x)*2个面。

    又因为n<2*k,所以剩下的面<2k,ans+=2

    所以ans=(s+2)*2,正好满足。证毕。

  • 相关阅读:
    Android开发加快sdk更新速度
    Java 解决约瑟夫问题
    单例模式之我见
    用Java来写常见的排序算法
    一位大牛写的单例
    watchdog监控文件变化使用总结——转载
    python-tkinter使用方法——转载(二)
    python-tkinter使用方法——转载(一)
    python中字符串操作
    python中os模块操作目录与文件名小结
  • 原文地址:https://www.cnblogs.com/xinxiyuan/p/11182361.html
Copyright © 2011-2022 走看看