【算法】最大间隙

最大间隙

 

求解数组元素在实轴上相邻的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;
}

猜你喜欢

转载自blog.csdn.net/sunshine641/article/details/84496091