pascal程序:数列

数列( sequence.pas) 【问题描述】 给定一个正整数 k(3≤k≤15),把所有 k 的方幂及所有有限个互不相等的 k 的方幂之和构成一个递增的序列,例如,当 k=3时,这个序列是: 1,3,4,9,10,12,13,… (该序列实际上就是:30,31,30+31,32,30+32,31+32,30+31+32,…)请你求出这个序列的第 N项的值(用 10进制数表示)。 例如,对于 k=3,N=100,正确答案应该是 981。 【输入文件】 输入文件 sequence.in 只有 1行,为 2个正整数,用一个空格隔开: k N (k、N的含义与上述的问题描述一致,且 3≤k≤15,10≤N≤1000)。 【输出文件】 输出文件 sequence.out 为计算结果,是一个正整数(在所有的测试数据中,结果均不超过 2.1*109)。(整数前不要有空格和其他符号)。 【输入样例】 3 100 【输出样例】 981pascal语言
2026年09月21日 07:27
有3个网友回答
网友(1):

这个中有规律
program sl;
var
a:array [1..2000] of longint;
i,j,k:longint;
n:longint;
begin
readln(k,n);
{ b[0]:=1;
c[0]:=0;
for i:=1 to 46 do
begin
b[i]:=b[i-1]*k;
c[i]:=c[i-1]+b[i];
end; }
a[1]:=1;
a[2]:=k;
i:=2;
while i<=512 do
begin
a[i]:=a[i div 2]*k;
for j:=i+1 to i*2-1 do
a[j]:=a[i]+a[j-i];
i:=i*2;
end;
writeln(a[n]);
readln;
end.
保证AC

网友(2):

就拿你的样例举例吧。。。100=64+32+4 换成2进制就是 1100100
再把 1100100 在三进制下的权值求出来。。。就是 729+243+9=981 就是这样。。
换种说法 就是 2(6)+2(5)+2(2) 变成 3(6)+3(5)+3(2)

网友(3):

先把n转化为二进制数
然后是1的位置就要加上k的对应次幂,0的无视
似乎需要高精