假设有数字s = 12,现在我想用元素a1 + a2 + ..... + an = 12来制作序列。
标准如下 -
- n必须是最小的。
- a1和a必须为1;
- ai可以将a(i-1)与1,0和-1不同。
醇>
对于s = 12,结果为6.
那么如何找到n的最小值。
答案 0 :(得分:3)
从给定n
中查找s
的算法:
1 .Find q = FLOOR( SQRT(s-1) )
2 .Find r = q^2 + q
3 。如果s <= r
然后n = 2q
,则n = 2q + 1
示例:s = 12
q = FLOOR( SQRT(12-1) ) = FLOOR(SQRT(11) = 3
r = 3^2 + 3 = 12
12 <= 12
,因此n = 2*3 = 6
示例:s = 160
q = FLOOR( SQRT(160-1) ) = FLOOR(SQRT(159) = 12
r = 12^2 + 12 = 156
159 > 156
,因此n = 2*12 + 1 = 25
和
的25个数字序列159: 1,2,3,4,5,6,7,8,9,10,10,10,9,10,10,10,9,8,7,6,5,4,3,2,1
答案 1 :(得分:2)
这是一种可视化解决方案的方法。
首先,将具有大于或等于星数的最小三角形(包含成功奇数星的行)绘制为n。在这种情况下,我们绘制一个16星三角形。
*
***
*****
*******
然后我们必须移除16 - 12 = 4
个更多的星星。我们从顶部开始对角地进行此操作。
1
**2
****3
******4
结果是:
**
****
******
最后,将列高加起来得到最终答案:
1, 2, 3, 3, 2, 1
。
答案 2 :(得分:0)
任何给定系列长度n的最大可能性是:
n是偶数=&gt; (N ^ 2 + 2N)/ 4 n是奇数=&gt;第(n + 1)^ 2/4
通过查看系列的简单算术和,可以很容易地得到这两个结果,在n的情况下,它甚至是系列1 ... n / 2之和的两倍。在n奇数的情况下,它是系列1 ...(n-1)/ 2的总和的两倍,并加上n + 1/2(中间元素)。
显然,只要n> 3,您就可以生成任何小于此最大值的正数。
因此,问题就是找到最大的n,其最大值大于目标值。
算法上我会选择:
查找(sqrt(4 * s)-1)并向上舍入到下一个奇数。调用此M.这是一个易于计算的值,将代表最低的奇数n将起作用。
检查M-1以查看其最大总和是否大于s。如果是这样,那么你的n是M-1。否则你的n就是M.
答案 3 :(得分:0)
有两种情况:s奇数和s偶数。当s为奇数时,你有序列:
1,2,3,...,(s-1)/ 2,(s-1)/ 2,(s-1)/ 2-1,(s-1)/ 2-2,.... ..,1
当你甚至有:
1,2,3,...,s / 2,s / 2-1,s / 2-2,...,1
答案 4 :(得分:0)
谢谢大家回答我。我推导出一个更简单的解决方案该算法看起来像 -
First find what is the maximum sum that can be made using n element-
if n=1 -> 1 sum=1;
if n=2 -> 1,1 sum=2;
if n=3 -> 1,2,1 sum=4;
if n=4 -> 1,2,2,1 sum=6;
if n=5 -> 1,2,3,2,1 sum=9;
if n=6 -> 1,2,3,3,2,1 sum=12;
So from observation it is clear that form any number,n 9<n<=12 can be
made using 6 element, similarly number
6<n<=9 can be made at using 5 element.
So it require only a binary search to find the number of
element that make a particular number.