用JAVA编程
某级数的前两项A1=1,A2=1,以后各项具有如下关系:An=An-2+2An-1下列程序的功能是:要求依次对于整数M=100,1000和10000求出对应的n值,使其满...
某级数的前两项A1=1,A2=1,以后各项具有如下关系:An=An-2+2An-1下列程序的功能是:要求依次对于整数M=100,1000和10000求出对应的n值,使其满足:Sn<M且Sn+1>=M,这里Sn=A1+A2+...+An,并依次把n值存入数组单元b[0],b[1]和b[2]中,请编制函数来实现此功能,最后调用函数把数组b[]中的值输出
展开
2个回答
展开全部
获取数列Sn的处理就无脑代码化了
static public int getSn(int n){
int Sn = 0;
if(n<0)return Sn;
if(n==1)Sn = A1;
if(n>=2)Sn = A1 + A2;
if(n>=3){
int a1=A1,a2=A2,a3;//a3 = a1 + 2*a2
for(int i = 3; i <= n; i++){
a3 = a1 + 2 * a2;
Sn+=a3;
a1 = a2;a2 = a3;
}
}
return Sn;
}
但是寻找M对应的n值方案有两种
1、每次重新新计算比较
static final public int A1 = 1;
static final public int A2 = 1;
static final public int [] M = {100,1000,10000};
static public int [] b;
static public void main(String [] args){
int size = M.length;
b = new int [size];
for(int i = 0; i < size; i++){
int Ans1=getSn(1),Ans2=getSn(2);
int j = 1;
while(true){
if(Ans1<M[i]&&Ans2>=M[i])break;
j++;
Ans1 = Ans2;Ans2 = getSn(j+1);
}
b[i]=j;
}
for(int i = 0; i < size ; i++)
System.out.println(b[i]);
}
2、形成表的查询方式,这个数列很明显从某个值开始将以爆炸式的开始增长,所以表值不用太大,估计25个左右就会超过int型的可容纳范围而变成负值,当然,如果楼主愿意用long的话自己改一下参照数组的定义就OK了
static final public int A1 = 1;
static final public int A2 = 1;
static public int [] lib = new int [25];
static final public int [] M = {100,1000,10000};
static public int [] b;
static public void main(String [] args){
for(int i = 1; i <= 25; i++){
lib[i-1] = getSn(i);
}
for(int i = 0; i < 3; i++){
int j = 0;
while(lib[j]>M[i] || lib[j+1]<M[i])j++;
b[i] = j+1;
System.out.println(b[i]);
}
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主你好
具体代码如下:
import java.util.*;
public class Test {
public static void fun(int[] a,int m){
int count = 0;//素数计数
for (int i = m+1;;i++) {
int j;
for (j = 2; j<= i/2; j++){//判断素数
if(i%j == 0){
break;
}
}
if(j> i/2 ){//如果是素数 赋给数组a的对应元素
a[count] = i;
count++;
if(count == 5){//当为5时 就跳出for循环
break;
}
}
}
}
public static void main (String[] args) {
int m;
int[] a = new int[5];
Scanner in = new Scanner(System.in);
System.out.print ("输入一个整数m:");
m = in.nextInt();
fun(a,m);
System.out.println ("大于" + m + "且临街" + m + "的5个素数分别是:");
for(int v:a){
System.out.println (v);
}
}
}
运行结果:
输入一个整数m:5
大于5且临街5的5个素数分别是:
7
11
13
17
19
希望能帮助你哈
具体代码如下:
import java.util.*;
public class Test {
public static void fun(int[] a,int m){
int count = 0;//素数计数
for (int i = m+1;;i++) {
int j;
for (j = 2; j<= i/2; j++){//判断素数
if(i%j == 0){
break;
}
}
if(j> i/2 ){//如果是素数 赋给数组a的对应元素
a[count] = i;
count++;
if(count == 5){//当为5时 就跳出for循环
break;
}
}
}
}
public static void main (String[] args) {
int m;
int[] a = new int[5];
Scanner in = new Scanner(System.in);
System.out.print ("输入一个整数m:");
m = in.nextInt();
fun(a,m);
System.out.println ("大于" + m + "且临街" + m + "的5个素数分别是:");
for(int v:a){
System.out.println (v);
}
}
}
运行结果:
输入一个整数m:5
大于5且临街5的5个素数分别是:
7
11
13
17
19
希望能帮助你哈
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询