1. 程式人生 > >【演算法】最大間隙

【演算法】最大間隙

最大間隙

 

求解陣列元素在實軸上相鄰的2個數之間的最大差值

 

輸入

  第一行輸入一個正整數N,表示資料的個數

  接下來的一行中有N個實數,表示陣列中的N個元素,中間以空格分隔

輸出:

  實軸上相鄰的兩元素之間差值的最大值

樣例輸入:

   5

   2.1  3.1  7.5  1.5  6.3

1-2         2-4                 4-6               6-8

1.5          2.1 3.1                                6.3 7.5

樣例輸出:

   3.2

解題思路:


     1、遞迴 將該函式看作 F(n)= F(n-1)+ F(n-2) ,F(1) = 1 ,F(2)= 1

     2、非遞迴 取兩個變數x,y,每次運算分別記錄f(n-2)、f(n-1)的值

#include<stdio.h>
#include<time.h>
int Fibonacci1(int n){
	int sum=0;
	if(n==2 || n==1)  sum= 1;
	else	sum+=Fibonacci1(n-1)+Fibonacci1(n-2);
	return sum;
}

int Fibonacci2(int n){
	int sum,i,x,y;
	sum=0;x=1;y=1;
	
	if(n==1 || n==2)    sum=1;
	else{
		for(i=2;i<n;i++){
			sum=x+y;
			x=y;
			y=sum;
		}
	}
	return sum;
}
int main(){
	int m,i,n[10];
	clock_t start, finish;   
	double time;    
	 
	scanf("%d",&m);
	for(i=0;i<m;i++)
		scanf("%d",&n[i]);
	
	printf("遞迴:\n");
	start=clock(); 
	for(i=0;i<m;i++)
		printf("%d\n",Fibonacci1(n[i]));
	finish=clock();
	time=(double)(finish-start)/CLOCKS_PER_SEC;
	printf("執行時間為:%f\n",time);
	
	printf("非遞迴:\n");
	start=clock();
	for(i=0;i<m;i++)
		printf("%d\n",Fibonacci2(n[i]));
	finish=clock();
	time=(double)(finish-start)/CLOCKS_PER_SEC;
	printf("執行時間為:%f\n",time);
	
	return 0;
}