zoukankan      html  css  js  c++  java
  • 算法学习——递推之摆动数列

    算法描述

    已知递推数列:

    a(1)=1

    a(2i)=a(i)+1

    a(2i+1)=a(i)+a(i+1) (i为正整数)

    求该数列的第n项,以及前n项中的最大值为多少,其n为多少?

    算法思路

    1. 采用递推的方法,使用一维数组,从2开始递推,一直递推到n

      a(i)=a(i/2)+1(n为偶数)

      a(i)=a((i+1)/2)+((i-1)/2) (n为奇数)

      我们只需要使用一个是否被2整除来判断n是偶数还是奇数,从而选择相对应的递推公式

    2. 查找最大值也容易,设置一个变量,只需要遍历该数组,遇到比变量大的就把该数值赋值给该变量

    3. 最大值所对应的项可能不止一个,所以我们找到一个就把该项数(数组的下标)打印出来

    算法实现

    	System.out.println("请输入n:");
    	Scanner scanner = new Scanner(System.in);
    	int n = scanner.nextInt();
    	scanner.close();
    	int[]  a = new int[n+1];//从1开始,所以n+1
    	a[1]=1;//初始条件
    	
    	//分条件进行正向递推
    	for(int i=2;i<=n;i++){
    		if(i%2==0){
    			a[i] = a[i/2]+1;
    		}else{
    			a[i] = a[(i+1)/2]+a[(i-1)/2];
    		}
    	}
    	
    	System.out.println("a("+n+")为"+a[n]);
    	
    	//遍历整个数组,找到最大值
    	int max = 0;
    	for(int i=1;i<=n;i++){
    		if(max<a[i]){
    			max = a[i];
    		}
    	}
    	
    	//遍历数组,找到与最大值相等的数,将该下标(项数)打印出来
    	for(int i=1;i<=n;i++){
    		if(max==a[i]){
    			System.out.print("a("+i+")=");
    		}
    	}
    	System.out.print(max);
    

    结果

  • 相关阅读:
    Android开发学习之路--Content Provider之初体验
    [NOI2005] 维修数列
    递归算法对完全二叉树的前序遍历
    非递归算法对完全二叉树的前序遍历
    java中的多态
    poj1088滑雪
    在网页中插入flash
    如何采用批处理文件安装一个.dll文件,并且注册
    结构体指针和数组理解
    完全二叉树
  • 原文地址:https://www.cnblogs.com/stars-one/p/9825316.html
Copyright © 2011-2022 走看看