zoukankan      html  css  js  c++  java
  • 2021寒假每日一题《数列》

    数列

    题目来源:NOIP2006普及组
    时间限制:(1000ms) 内存限制:(64mb)

    题目描述

    给定一个正整数 (k) ,把所有 (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行,为 (k)(N) 两个正整数,用一个空格隔开。

    输出格式

    输出一个正整数为计算结果(在所有的测试数据中,结果均不超过 (2.1∗10^9) )。
    (整数前不要有空格和其他符号)。

    数据范围

    (3 ≤ k ≤ 15) ,
    (10 ≤ N ≤ 1000)

    样例输入

    3 100
    

    样例输出

    981
    

    解题思路

    继续延长题目给出的串为 (3^3,3^0+3^3,3^1+3^3,3^0+3^1+3^3,3^2+3^3,3^0+3^2+3^3,3^1+3^2+3^3,3^0+3^1+3^2+3^3,…)
    即: (3,03,13,013,23,023,123,0123,…)
    规律并不是按多项式的项数来排列的,所以无法用排列数算出具体的项数。

    第一个思路:

    3的次方上面观察规律,即对 (0,1,01,2,02,12,012,…) 观察。
    因为每一个次方的数在一项中仅出现一次,用二进制从右往左看,第几位有则第几位为1,其它位为0,比如第一项是 (0),看成二进制从右往左第0位为1,即二进制的 (1) ;第二项是 (1) ,看成二进制从右往左第1位为1,即二进制的 (10)
    所以上面的串可以转换为 (1,10,11,100,101,110,111,…)
    然后发现这段就是二进制的 (1,2,3,4,5,6,7,…)
    所以第100项为:(1100100),即 (2,5,6) ,所以答案为 (3^2+3^5+3^6=981)

    第二个思路:

    观察数列 (1,3,4,9,10,12,13,…) 发现:
    其用三进制的表示为 (1,10,11,100,101,110,111,…)
    然后发现这段就是二进制的 (1,2,3,4,5,6,7,…)
    由此得到题解,将输入的 (N) 用二进制的形式表示出来,然后再将其用 (k) 进制展开转换为10进制。

    解题代码-Java

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            int k = input.nextInt();
            String n = Integer.toBinaryString(input.nextInt());
            input.close();
    
            int j = n.length() - 1;
            int ans = 0;
            for (char ch : n.toCharArray()) {
                if (ch == '1') {
                    ans += Math.pow(k, j);
                }
                j--;
            }
            System.out.println(ans);
        }
    }
    
  • 相关阅读:
    [转]MySQL之外键约束
    [转]mysql忘记密码,如何重置密码
    [转]MS Sql 7105错误
    [轉]免费的.NET混淆和反编译工具
    一個PDO操作類
    [转]基于FPGA的八位RISC CPU的设计
    SQL Server 2005中的分区表
    [轉]使用SQLDMO备份和恢复数据库(VB & ASP)
    [轉]VS 2010 通过 Architecture创建UML类图设计
    [转]用CSS调整scrollbar(滚动条)的配色
  • 原文地址:https://www.cnblogs.com/hurentian/p/14380408.html
Copyright © 2011-2022 走看看