您的位置:首页 > 其它

[终于可以自由的写出来了]数列

2010-10-14 18:06 309 查看
【题目描述】

给定一个正整数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*10^9)。(整数前不要有空格和其他符号)。

【样例输入】

3 100

【样例输出】

981

【分析】

具体的操作方法是。两个数组a,b,a[i]就是k ^ i,b[i]就是我们构造的序列。

两个指针p1,p2分别对应a,b。

初始化p2 = 0,p1 = 1。

对于当前构造的b[i]来说分两种情况。

a[p1]≠b[p2]: b[i] = a[p1] + b[p2++]

a[p1] == b[p2]: b[i] = a[++p1]; p2 = 1

然后输出b
即可。

#include <stdio.h>
#define MAXN 2000
int a[MAXN],b[MAXN];
int k,n,p1,p2;
int main() {
scanf("%d%d",&k,&n);
a[1] = 1;
p1 = 1;
for (int i = 1;i <= n;++i)
if (b[p2] == a[p1]) {
++p1;
a[p1] = a[p1 - 1] * k;
b[i] = a[p1];
p2 = 1;
} else {
b[i] = a[p1] + b[p2++];
}
printf("%d\n",b
);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: