• 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;不仅提高了逼格,而且使代码更加简洁。
  • 相关阅读:
    织梦DEDECMS更换目录后需要修改的内容绝对路径与相对路径问题
    <dedecms开发》给dede自定义表单添加提交验证功能
    PLSQL存储过程中的内部存储过程
    在Oracle中查询存储过程和函数
    PLSQL存储过程调用存储过程对异常的处理问题
    带参数存储过程的小例子
    对PLSQL的SQL%NOTFOUND的再验证
    PLSQL restrict reference的做法
    PLSQL的 dynamic sql小例子
    PLSQL execute immediate
  • 原文地址:https://www.cnblogs.com/langzi1996/p/6649223.html
Copyright © 2020-2023  润新知