閱讀677 返回首頁    go 技術社區[雲棲]


網易2018校招內推編程題 等差數列

問題:
 如果一個數列S滿足對於所有的合法的i,都有S[i + 1] = S[i] + d, 這裏的d也可以是負數和零,我們就稱數列S為等差數列。
小易現在有一個長度為n的數列x,小易想把x變為一個等差數列。小易允許在數列上做交換任意兩個位置的數值的操作,並且交換操作允許交換多次。
但是有些數列通過交換還是不能變成等差數列,小易需要判別一個數列是否能通過交換操作變成等差數列 
輸入描述:
輸入包括兩行,第一行包含整數n(2 ≤ n ≤ 50),即數列的長度。
第二行n個元素x[i](0 ≤ x[i] ≤ 1000),即數列中的每個整數。


輸出描述:
如果可以變成等差數列輸出"Possible",否則輸出"Impossible"。

輸入例子1:
3
3 1 2

輸出例子1:
Possible


java程序

public class ArithmeticSequence {

	public static void main(String[] args) {

//		輸入
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int[] arr = new int[n];
		for (int i = 0; i < n; i++) {
			arr[i] = scanner.nextInt();
		}

//		快速排序
		sortSmallToBig(arr, 0, arr.length - 1);

//		判斷差值
		int diff = arr[1] - arr[0];//先將前兩個數的差賦給變量diff
		for (int i = 2; i < arr.length; i++) {
			int temp = arr[i] - arr[i - 1]; //後續相鄰整數間的差值賦給temp
			if (temp != diff) {//若他們之間的差和前兩個差不等,說明不是等差數列,輸出Impossible 並結束程序。
				System.out.println("Impossible");
				return;
			}
		}

		System.out.println("Possible");
	}

	
//	smallToBig和sortSmallToBig是快速排序。 針對數組進行從小到大的排序。
//	調用 sortSmallToBig(int[] array, int start, int end)  傳入數組  0  和數組.lenth-1.
public static int smallToBig(int[] array, int start, int end) { int key = array[start]; while (start < end) { while (array[end] >= key && end > start) { end--; } array[start] = array[end]; while (array[start] <= key && end > start) { start++; } array[end] = array[start]; } array[end] = key; return end; } public static void sortSmallToBig(int[] array, int start, int end) { if (start >= end) { return; } int local = smallToBig(array, start, end); sortSmallToBig(array, start, local - 1); sortSmallToBig(array, local + 1, end); } }


最後更新:2017-09-02 16:02:51

  上一篇:go  網易2018校招內推編程題 交錯01串
  下一篇:go  創業囧途二