分数数列算法实现java

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],所以取均不相同的最小正整数也就是取与前面的分母都不相同的最小正整数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值