1. 程式人生 > >【演算法】最接近數

【演算法】最接近數

  1. 最接近數

題目描述

設計演算法求陣列中相差最小的兩個元素(稱為最接近數)的差

輸入

輸入的第1行有1個正整數n,表示陣列中的元素個數,接下來的一行有n個整數,表示陣列中從最小下標開始的n個元素的值,這些整數以空格分隔,。

輸出

輸出陣列中相差最小的兩個元素的差,如果有多個相同的差,只輸出一個。

樣例輸入

6

10 5,11,16,30,14

樣例輸出

1

解題思路:

一、採用暴力迴圈的方法,比較每個數與另一個數的差,留下最小的那個。

二、將陣列進行排序,然後比較相鄰兩個數值得差,留下最小的

#include<stdio.h>
#include<math.h>
#include<time.h>
void sort(int a[],int n){
	int i,j,k;
	for(i=0;i<n-1;i++){
		for(j=0;j<n-1-i;i++){
			if(a[i]>a[j]){
				k=a[i];
				a[i]=a[j];
				a[j]=k;
			}
		}
	}
		
}
int main(){
	int n,a[100],i,j,min,k,b[100];
	clock_t start,finish;
   	double totaltime;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	min =abs(a[0]-a[1]);
	for (i=0;i<n;i++) b[i]=a[i];
	//1.
	start=clock();
	for(i=0;i<n-1;i++){
		for(j=i+1;j<n;j++){
			k=abs(a[i]-a[j]);
			if(k<min)   min=k;
		}
	}
	finish=clock();
   	totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
   	printf("\n該方法執行時間為:%f",totaltime);
	
	//2.
	start=clock();
	sort(b,n);
	for(i=0;i<n-1;i++){
		k=abs(b[i]-b[i+1]);
		if(k<min) min=k;
	}
	finish=clock();
   	totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
   	printf("\n該方法執行時間為:%f",totaltime);
	
	printf("\n最小差為:%d",min);
	return 0;
}

 

應老師要求要比較時間。有錯誤感謝指出!