[アルゴリズム]白準1731号-推論


質問リンク:https://www.acmicpc.net/problem/1731
質問する
等差が整数の等差数列(ある数に1つの数を加えた数列)は、2つの数字で表すことができます.Pは数列の最初の数であり、Qは次の数になるために前の数に加算しなければならない数である.例えば、P=1、Q=2の場合、その等差数列は1、3、5、7…いいですよ.
等比が整数の等比数列(ある数から順に同じ数を乗じた数列)は、近似的に2つの数字で表すことができる.Pは数列の最初の数で、Qは前の数を乗じた数です.例えば、P=3、Q=2の場合、等比数列は3、6、12…いいですよ.
テディは世界で数学が一番好きな人で、毎日この数列が等差数列なのか等差数列なのかを決めて、次の数を求めます.
数列を指定する場合は、その数列のルールが等差数列か等差数列かを決定し、次の出現する数列を求めるプログラムを作成します.
入力
第1行は、数列の長さNを与える.2行目から、N行は数列の各要素を順次与える.与えられた数列は、等差数列または等比数列の1つです.Nは常に3以上50以下で、入力した数字は10^6以下の自然数です.
しゅつりょく
最初の行の出力数列の次の要素.この数字は20億以下です.
のり付け
これは、等差数列と等比数列のみを入力する条件での問題であり、n[2]-n[1] = n[1]-n[0]の条件を満たす限り、等差数列であり、それ以外にも等比数列で処理し、最後のインデックスの値から差分値を出力する.
コード#コード#
import java.util.*;

public class Main{
	public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int[] n = new int[num];
        for(int i=0;i<n.length;i++)
        {
        	n[i] = sc.nextInt();
        }
        sc.close();
        if(n[2]-n[1] == n[1]-n[0])
        	System.out.print(n[n.length-1] + (n[1]-n[0]));
    	
        else
        	System.out.print(n[n.length-1] * (n[1]/n[0]));
    }
}