給定乙個正整數k(3≤k≤15),把所有k的方冪及所有有限個互不相等的k的方冪之和構成乙個遞增的序列,例如,當k=3時,這個序列是:
1,3,4,9,10,12,13,…
(該序列實際上就是:3^0,3^1,3^0+3^1,3^2,3^0+3^2,3^1+3^2,3^0+3^1+3^2,…)
請你求出這個序列的第n項的值(用10進製數表示)。
例如,對於k=3,n=100,正確答案應該是981。
輸入格式:
輸入檔案只有1行,為2個正整數,用乙個空格隔開:
k n(k、n的含義與上述的問題描述一致,且3≤k≤15,10≤n≤1000)。
輸出格式:
輸出檔案為計算結果,是乙個正整數(在所有的測試資料中,結果均不超過2.1*109)。(整數前不要有空格和其他符號)。
輸入樣例#1:
3 100輸出樣例#1:
981noip 2006 普及組 第四題
模擬/列舉
這道題有兩種解法。
1.標準解法是轉換為二進位制(方法很巧妙,**也很簡單)。
以樣例為例:1,3,4,9,10,12,13,…
可以寫成: 0001
有興趣的同學可以嘗試,在這裡就不作深究。
2.筆者採用了一種**較為冗長的列舉方法,不過方法還是很巧妙的,思路也很清晰,比較容易接受。
以樣例為例:3^0,3^1,3^0+3^1,3^2,3^0+3^2,3^1+3^2,3^0+3^1+3^2,…
可以看作:從0開始列舉n(n為k的對數),先將k^n加入數列,再與數列中位於它前面的每乙個元素分別相加,再將各個和依次加入數列。
當數列中的第n項含有元素後將其輸出即可。
下面附上**。
program sequence;
var
k,n,c,d,e,i,j:longint;
t:boolean;
a:array[1..1000] of longint;
begin
readln(k,n);
a[1]:=1;
c:=1;
d:=0;
e:=0;
i:=2;
t:=true;
while i1 do
begin
if t then
begin
a[i]:=round(exp(c*ln(k)));
d:=a[i];
e:=i;
inc(c);
inc(i);
t:=false;
end
else
begin
for j:=1 to e-1 do
begin
a[i]:=d+a[j];
inc(i);
if i>1000 then break;
end;
t:=true;
end;
end;
writeln(a[n]);
end.
洛谷p1062 數列
給定乙個正整數k 3 k 15 把所有k的方冪及所有有限個互不相等的k的方冪之和構成乙個遞增的序列,例如,當k 3時,這個序列是 1,3,4,9,10,12,13,該序列實際上就是 3 0,3 1,3 0 3 1,3 2,3 0 3 2,3 1 3 2,3 0 3 1 3 2,請你求出這個序列的第n...
洛谷P1062(數列)
題目 給定乙個正整數k 3 k 15 把所有k的方冪及所有有限個互不相等的k的方冪之和構成乙個遞增的序列,例如,當k 3時,這個序列是 1,3,4,9,10,12,13,即3 0,3 1,3 0 3 1 3 2,3 0 3 2,3 1 3 2,3 0 3 1 3 2 請你求出這個序列的第n項的值 用...
洛谷 P1062 數列
給定乙個正整數k 3 k 15 把所有k的方冪及所有有限個互不相等的k的方冪之和構成乙個遞增的序列,例如,當k 3時,這個序列是 1,3,4,9,10,12,13,該序列實際上就是 3 0,3 1,3 0 3 1,3 2,3 0 3 2,3 1 3 2,3 0 3 1 3 2,請你求出這個序列的第n...