1. 程式人生 > >CCF201712-1 最小差值 (100分)

CCF201712-1 最小差值 (100分)

問題描述

試題編號: 201712-1
試題名稱: 最小差值
時間限制: 1.0s
記憶體限制: 256.0MB
問題描述:

問題描述

  給定n個數,請找出其中相差(差的絕對值)最小的兩個數,輸出它們的差值的絕對值。

輸入格式

  輸入第一行包含一個整數n
  第二行包含n個正整數,相鄰整數之間使用一個空格分隔。

輸出格式

  輸出一個整數,表示答案。

樣例輸入

5
1 5 4 8 20

樣例輸出

1

樣例說明

  相差最小的兩個數是5和4,它們之間的差值是1。

樣例輸入

5
9 3 6 1 3

樣例輸出

0

樣例說明

  有兩個相同的數3,它們之間的差值是0.

資料規模和約定

  對於所有評測用例,2 ≤ n ≤ 1000,每個給定的整數都是不超過10000的正整數。

問題描述:(略)

問題分析:簡單題,排序後遍歷一遍即可

程式說明:程式使用sort進行排序,相鄰的兩個數的差的絕對值是最小的,因此遍歷一遍即可求出答案。

提交後得100分的C++語言程式如下:

#include<iostream>
#include<algorithm>

using namespace std;

const int N=1000;
int a[N];

int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	  cin>>a[i];
	sort(a,a+n); //排序
	int ans=10000;
	for(int i=1;i<n;i++)
	  ans=min(ans,a[i]-a[i-1]);
	cout<<ans<<endl;
	return 0;
 } 

提交後得100分的Java程式

import java.util.Arrays;
import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		Scanner console=new Scanner(System.in);
		int n,ans=10001;
		n=console.nextInt();
		int[] a=new int[n];
		for(int i=0;i<n;i++)
			a[i]=console.nextInt();
		Arrays.sort(a);
		for(int i=1;i<n;i++)
			ans=Math.min(ans, Math.abs(a[i]-a[i-1]));
		System.out.println(ans);
		console.close();
	}
}