1.分数数列概念:一个递推的分数数列的前面六项为:1/2,3/5,4/7,6/10,8/13,9/15…归纳出数列的构成规律并输出第n项以及前n项中的最大项的值
2.分析:该数列有两个规律:1>分母d与分子c存在关系表达式:d=c+i,i表示当前显示的是第i个数;2>分子c为前面i-1项中的所有分子、分母都不相同的最小正整数
3.实现代码:
public void fun(){
System.out.println("please input a number:");
Scanner in = new Scanner(System.in);
int n = in.nextInt();
//初始化分子数组c和分母数组d
int c[] = new int[n+1];
int d[] = new int[n+1];
c[1] = 1;
d[1] = 2;
c[2] = 3;
d[2] = 5;
//存储最大项所在的索引的kmax
int kmax = 1;
for(int i=3; i<=n; i++){
for(int k=c[i-1]+1; k<d[i-1]; k++){
int t = 0;
for(int j=1; j<i-1; j++){
if(k == d[j]){
t = 1;
break;
}
if(t == 0){
c[i] = k;
d[i] = k + i;
}
}
}
if(c[i]*d[kmax] > d[i]*c[kmax])
kmax = i;
}
}
4.源代码分析:
1.创建两个数组分别表示分母和分子,初始化前面两个元素,方法递推
2.由分数数列两个条件可知,第i个分数的分子必定大于第i-1个分数的分子,并且小于第i-1个分数的分母,因此第i个分数的分子必然在c[i-1]+1至d[i-1]-1范围内
3.从上面这个范围中遍历,找到没有与前面的任何分母相同的数时,就是当前第i个分数的分子值了。因为前面的所有分子必定不在这里面,因为c[i]>c[i-1],所以取均不相同的最小正整数也就是取与前面的分母都不相同的最小正整数