这项任务是Arthur C. Clarke 的短篇小说《神的九十亿名字》的变体。这是一个整数拆分的问题。
- 整数 1 有 1 个拆分形式“1”。
- 整数 2 有 2 个拆分形式“1+1”和“2”。
- 整数 3 有 3 个拆分形式“1+1+1”、“2+1”和“3”。
- 整数 4 有 5 个拆分形式“1+1+1+1”、“2+1+1”、“2+2”、“3+1”、“4”。
- 整数 5 有 7 个拆分形式“1+1+1+1+1”、“2+1+1+1”、“2+2+1”、“3+1+1”、“3+2”、 “4+1”、“5”。
- 任务
输出一个整数拆分的三角,行号就是整数,这一行的所有数之和是这个整数可以拆分的数量。实现的方法有很多,递归法、动态规划等,开启你的智慧吧!穷尽你的方法实现吧
参考代码
SetBatchLines -1
InputBox, Enter_value, Enter the no. of lines sought
array := []
Loop, % 2*Enter_value - 1
Loop, % x := A_Index
y := A_Index, Array[x, y] := 1
x := 3
Loop
{
base_r := x - 1
, x++
, y := 2
, index := x
, new := 1
Loop, % base_r - 1
{
array[x, new+1] := array[x-1, new] + array[base_r, y]
, x++
, new ++
, y++
}
x := index
If ( mod(x,2) = 0 )
{
to_run := floor(x - x/2)
, y2 := to_run + 1
}
Else
{
to_run := x - floor(x/2)
, y2 := to_run
}
Loop, % to_run
{
array[x, y2] := array[x-1, y2-1]
, y2++
If ( y2 = Enter_value + 1 ) && ( x = Enter_value )
{
Loop, % Enter_value
{
Loop, % x11 := A_Index
{
y11 := A_Index
, string2 .= " " array[x11, y11]
}
string2 .= "`n"
}
MsgBox % string2
ExitApp
}
}
}
~Esc::ExitApp
学习学习
学习了