zoukankan      html  css  js  c++  java
  • 洛谷1062 数列 解题报告

    洛谷1062 数列

    本题地址: http://www.luogu.org/problem/show?pid=1062

    题目描述

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

    981

    说明

    NOIP 2006 普及组 第四题

    题解

    模拟/枚举

    这道题有两种解法。

    1.标准解法是转换为二进制(方法很巧妙,代码也很简单)。

    以样例为例:1,3,4,9,10,12,13,…

    可以写成: 0001

                  0011

                  0100

                  1001

                  1010

                  1100

                  1101

    有兴趣的同学可以尝试,在这里就不作深究。

    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项含有元素后将其输出即可。

    下面附上代码。

    代码

    1. program sequence;  
    2. var  
    3.   k,n,c,d,e,i,j:longint;  
    4.   t:boolean;  
    5.   a:array[1..1000] of longint;  
    6. begin  
    7.   readln(k,n);  
    8.   a[1]:=1;  
    9.   c:=1;  
    10.   d:=0;  
    11.   e:=0;  
    12.   i:=2;  
    13.   t:=true;  
    14.   while i<n+do  
    15.     begin  
    16.       if t then  
    17.         begin  
    18.           a[i]:=round(exp(c*ln(k)));  
    19.           d:=a[i];  
    20.           e:=i;  
    21.           inc(c);  
    22.           inc(i);  
    23.           t:=false;  
    24.         end  
    25.       else  
    26.         begin  
    27.           for j:=to e-do  
    28.             begin  
    29.               a[i]:=d+a[j];  
    30.               inc(i);  
    31.               if i>1000 then break;  
    32.             end;  
    33.           t:=true;  
    34.         end;  
    35.     end;  
    36.   writeln(a[n]);  
    37. end.  

    (本文系笔者原创,未经允许不得转载)

  • 相关阅读:
    touch:创建文件及修改文件时间戳
    stat:查看文件时间参数
    获取二维数组里面实际存有数据的行数
    Math.Atan2 方法
    c#移位运算符("<<"及">>")
    c# 一维数组和二维数组的几种定义方式<转>
    C#异常处理总结
    C#图片灰度处理(位深度24→位深度8)、C#图片二值化处理(位深度8→位深度1)
    WinForm窗体及其控件的自适应
    C#的WinForm窗体美化
  • 原文地址:https://www.cnblogs.com/yzm10/p/4754373.html
Copyright © 2011-2022 走看看