zoukankan      html  css  js  c++  java
  • UVA.11636 Hello World! (思维题)

    UVA.11636 Hello World! (思维题)

    题意分析

    这题挺水的,还是错了几发。 QWQ。
    有一个同学打了一行hello world,现在他想打n行hello world,请问最少复制粘贴几次。

    先说说我的XX想法。绝对是中了二进制的邪!样例给给打好呀,如果我想输出4个,那么复制一次,得到2个,再复制一次得到4个。然后就莫名其妙的和二进制连起来了。

    十进制———-二进制
    0————–00000000
    1————–00000001
    2————–00000010
    3————–00000011
    4————–00000100

    然后十进制对应的2^n就是在这个次数下最多得到的次数,然后又莫名其妙的想到了昨天写的(s &(1<< n)。结果可想而知,就是错了。

    还是说正解吧。

    假设复制n次,最多的到的个数是2^n,这个是确定无疑的,因为每次都将个数乘2嘛。于是我们可以从小到大依次枚举,即依次乘2,什么时候超过了给定的n,那么就说明这个就是最小的复制次数。下举例说明:

    1.n=3
    第一次 1 * 2 = 2
    第二次 2 * 2 = 4 结束。

    实际的复制情况是
    1 * 2 = 2 , 2+1 = 3。

    2.n=5
    第一次 1 * 2 = 2
    第二次 2 * 2 = 4
    第三次 4 * 2 = 8

    3.n=100
    第一次 1 * 2 = 2
    第二次 2 * 2 = 4
    第三次 4 * 2 = 8
    第四次 8 * 2 = 16
    第五次 16 * 2 = 32
    第六次 32 * 2 = 64
    第七次 64 * 2 = 128

    然后每次乘2,可以用位运算来简化。
    说到底还是有点二进制的色彩的。

    代码总览

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    int main()
    {
        int n,kase = 0;
        while(scanf("%d",&n)&&n>0){
            int ans = 0;
            while(1<<ans<n) ans++;  
            printf("Case %d: %d
    ",++kase,ans);
        }
        return 0;
    }
  • 相关阅读:
    Docker部署Mysql实践
    Docker部署Zookeeper部署集群实践(2)
    Docker部署Zookeeper部署实践(1)
    Docker部署Jenkins 2.285版持续部署集成实践(1)
    Ubuntu18.04安装docker
    Git的配置
    C语言的一些小知识
    线段树模板整理
    关于Kmp
    HDU-2063(二分图匹配模板题)
  • 原文地址:https://www.cnblogs.com/pengwill/p/7367126.html
Copyright © 2011-2022 走看看