string-JAVA算法训练 数列给定一个正整数k(3≤k≤15)

问题描述

JAVA算法训练 数列给定一个正整数k(3≤k≤15)

------------------题目-------------------------------------------------------
给定一个正整数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。

感觉看不懂题目序列的规律(把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列) ,然后上百度给的答案是要转2进制再求,求大神解惑。新人币不多

---------------代码------------------------------
public static void main (String args[])throws IOException{
long a[]=new long[1001];
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
String s[]=bf.readLine().split(" ");
int k=Integer.parseInt(s[0]);
int n=Integer.parseInt(s[1]);
int m=1;
int sum=0;
while(n>0){
a[m++]=n%2;
n=n/2;
}
m--;
for(int i=1;i<=m;i++){
sum+=a[i]*add(k,i-1);
System.out.println(a[i]+" "+add(k,i-1)+" "+sum);
}
System.out.println(sum);
}
static int add(int k,int n){
int sum=1;
for(int i=1;i<=n;i++)
sum*=k;
return sum;
}
}
-------------------运行结果------------------------------
3 100
0 1 0
0 3 0
1 9 9
0 27 9
0 81 9
1 243 252
1 729 981
981

解决方案

本来就是转换成二进制来做。
假设二进制的每一位表示 (N-1)^对应位数 是否包含在和中。
比如
当k=3时
0001表示3^0存在
0010表示3^1存在
0011表示3^0和3^1存在
0100表示3^2存在
0101表示3^2和3^0存在
...
这个序列也就是1 2 3 4 5...的二进制表示
所以从1~N输出下就可以了。

时间: 2024-08-03 15:32:01

string-JAVA算法训练 数列给定一个正整数k(3≤k≤15)的相关文章

图片-java编写如何判断一个正整数是否是fibonacci数列中的数?

问题描述 java编写如何判断一个正整数是否是fibonacci数列中的数? 解决方案 先产生一个1~10000内的费波拉契数列表,然后用如下算法http://rosettacode.org/wiki/Zeckendorf_number_representation 解决方案二: http://bbs.csdn.net/topics/120067216 解决方案三: 先计算费波拉契系列直到值等于给定的数据或者超出给定的数值,如果计算到某个n的值等于给定的数,说明是费波拉契数,否则超过给定的值说明

【算法】给定一个数组,除了一个数出现1次之外,其余数都出现3次,输出出现一次的那个数。

给定一个数组,除了一个数出现1次之外,其余数都出现3次.找出出现一次的数.如:{1, 2, 1, 2, 1, 2, 7},找出7.格式:第一行输入一个数n,代表数组的长度,接下来一行输入数组A[n],(输入的数组必须满足问题描述的要求),最后输出只出现一次的数. package yn; import java.util.Scanner; public class OutputMin { public static void main(String[] args) { Scanner input

算法题-把一个正整数分解为几个不同的正整数之和,打印出所有组合。

问题描述 把一个正整数分解为几个不同的正整数之和,打印出所有组合. 笔试遇到的一个题,不会做.从网上搜,只搜到求积最大的一个组合.有会的帮忙解决下,多谢,最好说下算法思路,能有c源码最好

求解一个JAVA算法,关于固定地图路径的

问题描述 求解一个JAVA算法,关于固定地图路径的 求解,大神在哪里哇,我在想是不是要用A星算法的,不过A星算法不太适应这个地图,黑色的方框表示障碍物,不能穿过,空心圆表示可通过区域. 解决方案 可以考虑蚁群算法,,,,,,,,,,,,,, 解决方案二: 图片奉上 解决方案三: 在线等啊,急急急急急急急急 解决方案四: 在线等啊,急急急急急急急急 解决方案五: 要怎么用JAVA来实现这个算法,求解 解决方案六: 要怎么用JAVA来实现这个算法,求解

用java画图,给定一个数学图论的度序列。

问题描述 用java画图,给定一个数学图论的度序列. 数学老师布置的题目,给定一整数序列,判断是不是一个度序列,如果是,就画出一个该度序列对应的图,图没有要求,请问大家有没有什么思路? 解决方案 http://blog.csdn.net/shuangde800/article/details/7857246http://blog.csdn.net/wangjian8006/article/details/7974845

设计一个算法完成两个超长正整数的加法

问题描述 设计一个算法完成两个超长正整数的加法 要求实现函数: void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult); 输入参数: char * pcAddend:加数 char * pcAugend:被加数 char * pcAddResult:加法结果 返回值:无 我设计了一个函数 void AddLongInteger(char * pcAddend, char * pcAugend, char

蓝桥杯-算法训练51-Torry的困惑(基本型)

今天做这道题最初以为会用到什么数学公式,在思考后发现自己想多了. 思路主要两个: 1. 生成一个质数表,再按要求求值(本文就按此方法): 2.从小取到大,判断是否是质数,如果是就相乘,并构建计数器判断是否达到n个. 算法训练 Torry的困惑(基本型)   时间限制:1.0s   内存限制:512.0MB 问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7--这样的数叫做质数.Torry突然想到一个问题,前10.100.1000.10000--个质数的乘积是多少呢?他把这个问题

蓝桥杯-算法训练2 最大最小公倍数

刚做了,蓝桥杯算法训练的最大最小公倍数一题,感觉考查的是数学了,哈哈. 时间限制:1.0s   内存限制:256.0MB 问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少. 输入格式 输入一个正整数N. 输出格式 输出一个整数,表示你找到的最小公倍数. 样例输入 9 样例输出 504 数据规模与约定 1 <= N <= 10^6. 思路如下: 1. n是奇数,那就最大的三个数相乘 2. n是偶数,得分两种情况了, ①如果n不是3的倍数,那就s=n*(n-1)

JAVA函数实现任意给定一组数, 找出任意数相加之后的结果为35

用JAVA写一个函数.功能如下:任意给定一组数,例如{12,60,-8,99,15,35,17,18},找出任意数相加之后的结果为35(任意设定)的情况. 可以递归算法来解: package test1; import java.util.Arrays; public class demo { public static void main(String[] args) { String str = "12,60,-8,99,15,35,17,18,8,10,11,12"; int s