编程找规律3
编程找规律3
zengxiangwei 发表于4年前
编程找规律3
  • 发表于 4年前
  • 阅读 52
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

/****************************************************************** 

一个数列的前 6 项为:1/2,3/5,4/7,6/10,8/13,9/15等,试求数列 

的第 n (n<2000) 项。 

分析:经过观察发现分母有如下性质,等于分子加上该元素在序列中的顺序标 

号,如第2项,3/5  5 = 3+2  ,第三项 4/7  7 = 4+3; 

那么分子有什么性质呢,经比较观察得到,分子是,前面序列中(包括分子和 

分母)未出现的最小整数,仔细观察还发现,所有的分子是递增的,分母也是 

递增的,这样就可以通过递推的方式从前往后依次推出所有的元素。这里有 

一个小技巧,在查找分子是,由序列性质可知,后项分子大于前项分子,这样 

就可以缩小查找,为了便于查找,将所有的项的分子分母挨着存放在数组中, 

如 a[0] = 1,第一项分子;a[2] = 2,第一项分母; 

*******************************************************************/ 

  

/*******************************************************************************
Copyright (c)哈尔滨工程大学  曾相未  保留所有权利。



文件名: Test_6_2.java 

描述: 问题求解找规律3
作者: 曾相未
时间:2013/10/21

*******************************************************************************/


import java.util.Scanner; 

class Test_6_2{ 

         //依次向后推出需要的项 

         void fullNumberArray(int a[], int n){ 

                   a[0] = 1; 

                   a[1] = 2;//第一项 

                   int t; 

                   //从第二项依次向后递推 

                   for(int i = 2;i < 2 * n;i = i + 2) 

                   { 

                            //先求出分子 

                            t = a[i -2] + 1;//比前项分子大 

                            //依次向前在分母中找,看有没有与t相同的数; 

                            int j = i -1; 

                            while(true) 

                            { 

                                     if(t > a[j])  break;//所有前项分母中没有t,找到分子,退出 

                                     //前项分母中含有t,t加1,继续在前项分母中找t 

                                     if(t == a[j])  {t ++;j = i - 1;} 

                                     else j = j - 2;//继续往前找 

                            } 

                            a[i] = t;//分子 

                            a[i+1] = a[i] + i/2 + 1;//分母 

                   } 

         }    

         

         public static void main(String []args){ 

                   Test_6_2 test = new Test_6_2(); 

                   Scanner sc = new Scanner(System.in); 

                   System.out.println("Please input n:"); 

                   int n = sc.nextInt(); 

                   int [] a = new int [2 * n + 10];//用于存放序列,分子分母依次存放 

                   test.fullNumberArray(a,n); 

                   //输出要求的序列 

                   for(int i = 0; i < 2 * n;i = i + 2) 

                            { 

                                     System.out.print(a[i] + "/"  + a[i+1] + " "); 

                                     if((i + 2) % 20 == 0)  System.out.println();//每行打印10项 

                            } 

         } 

}
共有 人打赏支持
粉丝 9
博文 14
码字总数 18092
×
zengxiangwei
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: