• 3的方幂及不相等的3的方幂的和排列成递增序列{1,3,4,9,10,12,13…},写出数列第300项


    [转] http://blog.sina.com.cn/s/blog_6d932f2a0101jgyz.html

    问题13的方幂及不相等的3的方幂的和排列成递增序列{1,3,4,9,10,12,13…},写出数列第300项。

    这里说明一下,全文都不考虑数的长度会不会超过我们定义类型的最大值。

    分析:首先想到的是再继续列出后面的一些项,找找规律。

    1                                                           →第一行有1个数

    3,4                                                      →第二行有2个数

    9,10,12,13                                     →第三行有4个数

    27,28,30,34,36,37,39,40     →第四行有8个数

    ……                                                        →第k行有2k个数

    看见右边的数,我们应该很能够很敏感的看出规律来。比如这个数列的第1237就可以拆成这样的形式:37=1x33+1x32+0x31+0x30,然后我们把3的方幂前面的系数提取出来,就能得到一串数字:1100,这也就是12的二进制数。

    然后我们推广到一般的情况,对于上述数组中的第nan,我们也可以拆成

    an=b0x30+ b1x31+ b2x32+ b3x33+……+ bmx3m

    bn等于01,然后按照bm…b2b1的顺序写出来,就是一个二进制数。因此,我们的问题就可以解决的。将300写成二进制数就是1 0010 1100,所以a300=1x38+1x35+1x33+1x32=6848

    剩下的问题无非是二进制的转换(O(logN))和求幂(O(logN))的两个算法。

    其实得到这样的答案并不难,有同学提示我说这不就是三进制么,然后我就把3进制的数挨个列出来,也发现了规律,于是就有了后面的问题3

    下面列出1-20与之对应的3进制数

    1       001      1

    2       002

    3       010      2

    4       011      3

    5       012

    6       020

    7       021

    8       022

    9       100      4

    10     101      5

    11     102

    12     110      6

    13     111      7

    14     112

    15     120

    16     121

    17     122

    18     200

    19     201

    20     202

    其中红色的数字就是我们上面的数组an的前几项,第三列就是数字在数组中的第几项,发现他们对应的三进制编码里面都没有2,所以才恍然大悟,是因为在组成和的时候,3的方幂都最多只用了一次,因此3进制编码里面才不会出现2(果然不同的同学思路和观察角度是不一样的)。

     

    问题2:我们再把这个问题扩展一下,给定一个正整数k,把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,写出数列第n项。

    分析:有了上一个问题的分析,这个问题解决起来就简单多了。我们先将n转换成2进制数bm…b2b1,然后计算an=b0xk0+ b1xk1+ b2xk2+ b3xk3+……+ bmxkm就可以得到第n项的值了。

     

    问题3:再把这个问题扩展一下,用5的方幂{1,5,25,125,625…}序列中的项组成的和,其中每项至多能用2次,这些和构成一个递增的序列{1,5,6,7,10,11,25,26,27,30,31,32…},写出数列第n项。

    分析:当然,这个题你肯定能迅速想到将n转换成3进制,然后用每一位去乘以对应的5的方幂,在求和,就能得到第n项的值。

    但是这里还是分析一下。在问题1中有分析到3进制的问题,所以我们不妨把120的数写成5进制来找一找规律:

    1        001        1

    2        002        2

    3        003

    4        004

    5        010        3

    6        011        4

    7        012        5

    8        013

    9        014

    10      020        6

    11      021        7

    12      022        8

    13      023

    14      024

    15      030

    16      031

    17      032

    18      033

    19      034

    20      040

    红色加粗的数字就是an的前几项,很显然,他们对应5进制数中,只含有0,1,2,因为每个方幂都有可能被用到0次、1次和2次,仍然有an=b0xk0+ b1xk1+ b2xk2+ b3xk3+……+ bmxkm,只不过这里的k=5,并且bn可以取到012三个数,所以此时bm…b2b1是一个三进制数。我们把n转换成3进制再去计算,就是顺理成章的了。

     

    问题4:你应该猜得出来接下来这个扩展的问题是什么了,就是把问题3中的5换成k,并且其中每项最多能用到j(j,求第n项。

    看过前面几个问题的分析,这个问题的解决就不在话下了。

     

    问题5:现在给你一个序列{1,3,7,15,31,63,127,255…},该序列每一项都是前一项的两倍加1,同样用这个序列中的项组成和,且每项最多用一次,结果按照升序排列,求第100项的值。

    解法也很显然,我们把100写成2进制数就是110 0100,原序列的通项公式是2n-1,所以第100项就是1x127+1x63+1x7=197

    只要序列满足前n-1项的和小于第n项,我们就能按照前面的思想,就算给定的序列是没有通项公式的,我们都能用这个方法算出新得到的序列的第n项。

    [转] http://blog.sina.com.cn/s/blog_6d932f2a0101jgyz.html

  • 相关阅读:
    idea设置全局ignore
    win 2012 安装mysql 5.7.20 及报错 This application requires Visual Studio 2013 Redistributable. Please ins
    win 2012 安装mysql 5.7.20 及报错 This application requires Visual Studio 2013 Redistr
    kafka 删除 topic
    java编译中出现了Exception in thread “main" java.lang.UnsupportedClassVersionError
    Centos中使用yum安装java时,没有jps的问题的解决
    Spring 整合Junit
    Spring纯注解配置
    Spring 基于注解的 IOC 配置
    打印java系统的信息
  • 原文地址:https://www.cnblogs.com/morgan-yuan/p/3331108.html
Copyright © 2020-2023  润新知