14数列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了14数列相关的知识,希望对你有一定的参考价值。

题目描述

给定一个正整数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^0
3^1  3^1+3^0
3^2  3^2+3^0  3^2+3^1  3^2+3^1+3^0
......
所以规律为:每添加一个新的k的方幂,设该项为第X项,则它后面的X-1项为它与它前面的X-1项分别相加的结果。题目要求第N项,则在外层和内层均设置一个监听器,外层是指产生新的k的方幂的项,内层是指新的k的方幂与它前面所有项逐一相加。在两层循环中一旦监视到第N项出现,即刻退出循环,输出第N项。
具体代码:
 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4      int Se[1002];
 5      int loc;
 6      int n, k;
 7      int temp;
 8      int num;
 9      while (cin >> k >> n){
10            loc = 0;
11            num = 1;
12            while (loc < n){
13                 temp = loc;
14                 Se[loc++] = num;
15                 for (int i = 0; i < temp&&loc<n; i++)
16                      Se[loc++] = num + Se[i];
17                 num *= k;
18            }
19            cout << Se[n - 1];
20      }
21      return 0;
22 }
做题感悟:这类题其实不难,没有复杂的数据结构和算法,只要能找出规律即可设计出程序。同时注意学习更加简洁的代码写法,如Se[loc++] = num;不仅提高了逼格,而且使代码更加简洁。

以上是关于14数列的主要内容,如果未能解决你的问题,请参考以下文章

1049 数列的片段和 (20 分)

PAT 1049. 数列的片段和

B1049 数列的片段和

PAT-乙级-1049 数列的片段和

1049 数列的片段和(注意精度!!)

1049 数列的片段和