【算法】最接近数

  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;
}

应老师要求要比较时间。有错误感谢指出!

猜你喜欢

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