关闭

只考加法的面试题

标签: 只考加法的面试题算法
232人阅读 评论(0) 收藏 举报
分类:

原文链接:http://blog.csdn.net/yutianzuijin/article/details/10300067

问题1. 写一个程序,对于一个64位正整数,输出它所有可能的连续自然数(两个以上)之和的算式;

问题2. 例如32就找不到这样的表达,这样的数字有什么规律?

问题3. 64位正整数中,子序列数目最多的是哪一个?能否用数学知识推导出来?

------------------------------------------------------------------------------------------------------------------------------------------

将一个正整数表示成连续自然数之和,即N=s+(s+1)+(s+2)+…+(e-1)+e。利用等差数列求和公式,我们有



也即2N=(s+e)(e-s+1),该等式表示可以将2N分解成两个正整数的乘积。我们设x=s+e, y=e-s+1(其中x>y)。利用x、y我们可以求解获得se


因为se都是整数,因而为了使上面的式子能整除,则xy必须一奇一偶。因为2N=xy2N含有偶因子,所以N必须含有奇因子才能使等式成立。这也就证明了N能表示成连续自然数的充要条件:N必须含有奇数因子,问题二得证。


利用公式(2),我们即可获得正整数N的一个连续自然数序列。为了输出所有的连续自然数序列,我们需要获得所有的xy组合,也即求2N的所有因子组合。我们可以利用算法基本定理将2N分解成有限个质数的乘积:


我们将2N按照质因子进行分解,由于xy只有一个偶数,所以2N的分解式中质因子2的所有组合都只能在其中一个数中,否则xy都是偶数。不妨假设x是偶数,则


其中。由此我们可以知道,2N的所有质因子组共有(j+1) (k+1)…组。由于当x等于2N时,y等于1,此时的连续自然数个数为1,小于2,所以满足条件的连续自然数序列个数为:(j+1) (k+1)…-1,这就回答了问题一,我们可以首先获得2N的所有质因子分解,然后组合质因子并满足x>y即可获得所有的序列。


问题三按照网上的资料,有两种理解方式:1)、可以表示为最多个序列的那个数;2)、序列中项最多的那个数。但是按照题意其实应该是第一种理解方式。由于质因子2只能在xy的某一个数中,对质因子分解不起作用,所以为了让序列个数尽可能多,N的质因子中不能包含2。因此若让子序列个数最多,则即(j+1) (k+1)…最大。通过简单分析我们可以获得具有最多序列个数的正整数j、k等质因子指数的两个性质:


性质一可以通过替换来证明,假设当前的最大序列个数不满足性质一,设第一个不满足性质的两个指数为a和b,满足a<b。由于序列个数为(j+1) ∙ (k+1) ∙…,我们通过将两个质因子的指数交换可以获得相同的序列个数。此外,由于前面的质因子小,交换之后总的乘积会变小,从而可能产生一个更大的指数,使序列个数更多。通过这样依次交换不满足性质的相邻两个指数,最终我们会得到满足性质一并且使序列个数最多的指数序列。这也与经验相吻合,要想使序列个数尽可能多,则正整数必须尽量少含有大的质因子。对于性质二,当正整数只包含质因子3时,质因子之和最大,此时为40。而当正整数含有越多较大的质因子时,则质因子之和就越小,在满足性质一的前提下,当正整数等于3 ∙5 ∙…∙53时,和最小,此时共有15个质因子,含有的序列个数为2^15-1。该正整数含有的序列个数已经非常多,但不一定是最多,例如将53替换为27,则序列个数升为5∙2^13-1。如果我们继续替换,将3^4 ∙5 ∙…∙47变为3^3 ∙5^2 ∙…∙47,则序列个数又升为6∙2^13-1。该数可能已经是具有最多序列的数,但是要想获得准确的最大序列个数,我们还需要利用性质一二去遍历所有可能的情况。如果按照第二种理解方式,则我们可以证明具有最多项的数N的最多项必从1开始。假设最多项不从1开始而是从s(s>1)开始,则我们可以将该最多项的每一项均减去s-1,则最多项等价于从1开始的最多项,也即我们至少可以构造和之前的最多项一样长的新序列。此外,由于每一项均减少了s-1,如果此时减少的和大于最多项的最大项,我们还可以添加新的项到最多项的末尾,产生更长的最多项。

0
0
查看评论

只考加法的面试题

问题出自编程之美。解法是自己思路 3=1+2 9=4+5 9=2+3+4 问题:对于正整数n,输出所有可能连续自然数(至少两个)之和的算式 分析正整数2,3,9,18,30 分析2,无解 分析3,3=1+2,1个解 分析9,9=2+3+4 分析18,对其进行因式分解,18=2*3*3 设定解中有2个...
  • zhangwei1120112119
  • zhangwei1120112119
  • 2014-01-03 16:41
  • 440

《编程之美》2.21 只考加法的面试题

网上存在很多对该问题的解答,但是很多解答都有错误,比较正确的是http://blog.csdn.net/lyso1/article/details/5399146,但是问题解法较为复杂,在此将从另一个思路对问题进行解答,很大程度简化了算法正确性的证明。 -----------------------...
  • yutianzuijin
  • yutianzuijin
  • 2013-08-25 13:58
  • 6653

只考加法的面试题

void findsequence(int num){ int sum,i,j; sum=1,i=1,j=2; for( ; j<num && sum<num ; sum+=j , j++); for( ; i<j ; ){ if(sum==num &a...
  • logarrow
  • logarrow
  • 2013-08-30 23:14
  • 491

编程之美——2.21 只考加法的面试题

我们知道: 1+2 = 3; 4+5 = 9; 2+3+4 = 9。 等式的左边都是两个或两个以上连续的自然数相加,是不是所有的整数都可以写成这样的形式呢? 问题1:  对于一个64位正整数,输出它所有可能的连续自然数(两个以上)之和的算式。 问题2:  大家在测试上
  • wens07
  • wens07
  • 2011-08-26 20:45
  • 401

编程之美2.21(只考加法的面试题)

转自http://blog.csdn.net/yutianzuijin/article/details/10300067  网上存在很多对该问题的解答,但是很多解答都有错误,比较正确的是http://blog.csdn.net/lyso1/article/details/5399146...
  • u010590166
  • u010590166
  • 2014-01-24 16:32
  • 437

编程之美2.21 只考加法的面试题

问题1. 写一个程序,对于一个64位正整数,输出它所有可能的连续自然数(两个以上)之和的算式; 问题2. 例如32就找不到这样的表达,这样的数字有什么规律? 问题3. 在64位正整数中,子序列数目最多的是哪一个?能否用数学知识推导出来? 问题1直接见代码,如下: /************...
  • hugang012070
  • hugang012070
  • 2013-10-04 23:16
  • 704

编程之美--只考加法的面试题

看见题目的第一反应是DP,可以使用之前的值来计算,递推公式如下:f(n) = f(n-i)+i再增加适当的剪枝即可实现,但是对于64位的整数,肯定没有足够的存储空间,放弃。考虑之后对公式进行了推导:num = Σi(bg上式中的bg和end分别为求和公式中起始的位置和结束的位置,均为闭区间。令sub...
  • hitrose27
  • hitrose27
  • 2011-04-15 18:25
  • 1370

只考加法的面试题(编程之美)

For example:
  • hz5034
  • hz5034
  • 2014-09-21 10:50
  • 270

编程之美2.21——只考加法的面试题

问题描述:写一个程序,对于一个64位正整数,输出它所有可能的连续自然数(两个以上)之和的算式。 例如:3=1+2; 9=5+4; 9=2+3+4。 刚开始看到这个题目,直接想到的方法就是蛮力解决:即对于每一个输入的整数,从1开始加,一直加到等于或者大于这个整数为止。如果等于这个整数,则找到了一种...
  • luyafei_89430
  • luyafei_89430
  • 2013-10-23 10:27
  • 785

2.21 只考加法的面试题

2.21 只考加法的面试题算法要求输出64位正整数范围内不能由连续整数相加而成的整数,本文试图采用穷举法搜索出满足条件的整数代码1lim = 800 def fixout(base,lim):#多少连续相加的数,第一个数字是多少 seq = [] for i in r...
  • paull_zhang
  • paull_zhang
  • 2017-09-16 11:27
  • 91
    个人资料
    • 访问:102254次
    • 积分:1946
    • 等级:
    • 排名:千里之外
    • 原创:93篇
    • 转载:43篇
    • 译文:0篇
    • 评论:8条
    最新评论