【演算法】最接近數
阿新 • • 發佈:2018-11-26
- 最接近數
題目描述
設計演算法求陣列中相差最小的兩個元素(稱為最接近數)的差
輸入
輸入的第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; }
應老師要求要比較時間。有錯誤感謝指出!