Problem:
家庭菜園に野菜を植えることにしました。n 粒の種があったので1日に1粒ずつ、n 日かけて n 粒の種をまきました。どの種からも芽が出て、すくすくと育っています。収穫の時期が待ち遠しいものです。

ある日、いつものように苗に水やりをしていると、おかしなことに気づきました。n 本の野菜の苗があるはずなのに、1本多いのです。雑草が生えてきてしまいました。直ちに引っこ抜きたいのですが、困ったことにどの苗もよく似ていて、野菜と雑草の見分けがつきません。

手がかりになるのは、野菜の成長速度です。この野菜は、種をまいてからずっと、1日に決まった長さだけ伸び続けるのです。しかし、この「決まった長さ」というのが何センチメートルなのかはわかりません。また、最初の種を何日前にまいたのかも忘れてしまいました。苗は一列に並んでいますが、唯一覚えているのは、種をまくとき毎日一粒ずつ右から順にまいていったことだけです。

n＋１本の苗の長さを入力し、雑草の長さを出力するプログラムを作成して下さい。

入力

入力は複数のデータセットからなる。入力の終わりはゼロ１つ行で示される。入力は以下の形式で与えられる。

n
h1 h2 h3 ... hn+1

１行目の n (4 ≤ n ≤ 100) は野菜の苗の数を表す整数である。２行目は１つの空白で区切られた n+1 個の整数を含み、 hi (1 ≤ hi ≤ 109)は左からi番目の苗の長さを示す。

h1 h2 ... hn+1 が等差数列になっているような入力は与えられない。

データセットの数は 500 を超えない。

出力

各データセットごとに雑草の長さを出力する 。

入力例

5
1 2 3 6 4 5
6
1 3 6 9 12 15 18
4
5 7 9 11 12
0

出力例

6
1
12

Solution in JAVA (judge verdict: Wrong Answer)

import java.util.Scanner;

public class Main {

	/**
	 * @param args
	 */
	Scanner sc = new Scanner(System.in);

	void run() {
		for (;;) {
			int n = sc.nextInt();
			if (n == 0)
				break;
			int[] hs = new int[n + 1];
			int[] ds = new int[n];
			for (int i = 0; i <= n; i++) {
				hs[i] = sc.nextInt();
			}

			for (int i = 0; i < n; i++) {

				ds[i] = hs[i + 1] - hs[i];
			}
			int d = 0;
			if (ds[0] == ds[3])
				d = ds[0];
			else if (ds[0] == ds[1])
				d = ds[0];
			else if (ds[1] == ds[2])
				d = ds[1];
			else if (ds[2] == ds[3])
				d = ds[2];
			else if (ds[1] == ds[3])
				d = ds[1];
			boolean flag = false;
			for (int i = 0; i < n - 1; i++) {
				if (ds[i] != d && ds[i + 1] != d) {
					System.out.println(hs[i + 1]);
					flag = true;
					break;
				}
			}
			if (flag)
				continue;
			if (ds[0] != d) {
				System.out.println(hs[0]);
				continue;
			}
			if (ds[n - 1] != d)
				System.out.println(hs[n]);
		}
	}

	public static void main(String[] args) {

		new Main().run();
	}
}