堆积木 求解题思路
pascal吧
全部回复
仅看楼主
level 1
leedlake 楼主
有n根木头(2<=n<=10^16 ),堆成k层(2≤k≤n),要求下层木头数为上层木头数加1.
例如:n=6
堆法有
1种堆法。
n=9
堆法有

2种堆法。
n=4 不可能有符合条件的堆法。
输入
一个整数n
输出
一个整数,即堆法数,若不可能,则输出0。
样例输入21样例输出3提示
21根木头堆法有共3种,如下
2014年07月27日 15点07分 1
level 11
枚举高度?
2014年07月27日 17点07分 2
level 12
var n:int64; i,s:longint;
begin
readln(n);
for i:=2 to trunc(sqrt(n))*2 do
if i mod 2=0 then if ((n+i div 2) mod i=0)and(n div i-(i div 2-1)>0) then s:=s+1
else
else if (n mod i=0)and(n div i-(i div 2)>0) then s:=s+1;
writeln(s);
end.
2014年07月28日 00点07分 3
1