码迷,mamicode.com
首页 > 其他好文 > 详细

14、数列

时间:2017-03-31 00:21:17      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:产生   code   添加   while   含义   设计   思路   技术   img   

题目描述

给定一个正整数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、数列

标签:产生   code   添加   while   含义   设计   思路   技术   img   

原文地址:http://www.cnblogs.com/langzi1996/p/6649223.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!