用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[]中的值输出 展开
 我来答
kasim416
推荐于2016-06-03 · TA获得超过707个赞
知道小有建树答主
回答量:351
采纳率:100%
帮助的人:296万
展开全部

获取数列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]);
}
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
AK_妁僖
2014-09-15 · 超过61用户采纳过TA的回答
知道答主
回答量:119
采纳率:0%
帮助的人:117万
展开全部
楼主你好

具体代码如下:
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

希望能帮助你哈
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式