zoukankan      html  css  js  c++  java
  • UVA.11384 Help is needed for Dexter (思维题)

    UVA.11384 Help is needed for Dexter (思维题)

    题意分析

    同样水题一道,这回思路对了。
    给出数字n,面对一个1,2,3,4……n的数字序列,你可以对他们的部分或者全部减去一个相同数字,最后使得这个序列变为全0的序列,求这样操作的次数最小值。

    一开始着手想的是两两分组,既然能两两分组,为什么不三三分组呢?既然能三三分组,为什么不能四四分组呢?不难联想到二分法,即折半分组,看如下的例子:

    n = 9
    1,2,3,4,5,6,7,8,9
    折半后
    1,2,3,4
    5,6,7,8,9
    使5到9均减5,便得到
    1,2,3,4
    0,1,2,3,4
    好了就有2个1234的序列了,再次折半,变成:
    1,2,1,2
    3,4,3,4(那个0已经省略了),然后对下面的序列全部减2,就会得到。
    1,2,1,2
    1,2,1,2
    然后再折半,把所有的2全部减1,即得到:
    1,1,1,1,1,1,1,1
    最后一步,所有的1都减去1,变成0了。

    根据上述的思路,可以看出,每一次折半,都要进行一次减法操作,那么我们不难想到这样一个算法:每次都除2,除2的同时计数器+1,知道算到1为止。

    代码总览

    #include <iostream>
    #include <cstdio>
    using namespace std;
    int f(int n)
    {
        return n == 1 ? 1 :f(n/2) +1;
    }
    int main()
    {
        int n;
        while(scanf("%d",&n)!= EOF){
            int ans = f(n);
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    Catalan数,括号序列和栈
    NOIP2017 心路历程
    [Code Festival 2017 qual A] C: Palindromic Matrix
    HIVE 数据类型
    HADOOP-HIVE学习笔记(3)- Beeline
    HADOOP-HIVE学习笔记(2) CLI
    中信证券 指标公式 笔记
    【转】Python将列表数据写入文件(txt, csv,excel)
    Python中创建二维数组
    DevExpress 控件汉化方法
  • 原文地址:https://www.cnblogs.com/pengwill/p/7367125.html
Copyright © 2011-2022 走看看