トピック
[問題の説明]
シーケンスa_1、a_2、…、a_nで、2つの要素a_iとa_jの間の距離を| ij | + | a_i-a_j |として定義します。つまり、要素添え字の距離の絶対値に要素値の差を加えたものです。ここで、| x |はxの絶対値を表します。
一連の数値を指定して、要素間の最大要素距離を見つけます。
【入力形式】入力
の1行目に整数nが含まれています。
2行目には、n個の整数a_1、a_2、…、a_nが含まれています。隣接する整数は、特定の番号のシーケンスを示すためにスペースで区切られています。
【出力形式】
出力行には、回答を示す整数が含まれています。
[サンプル入力]
5
9 4 2 4 7
[サンプル出力]
9
[サンプルの説明]
a_1とa_3の間の距離は| 1-3 | + | 9-2 | = 9です。
[評価ユースケースのスケールと規則]評価ユースケースの
50%について、2 <= n <= 100、0 <=シーケンス内の数<= 1000。
すべての評価ケースで、2 <= n <= 1000、0 <=シリーズの数<= 10000。
ヒント
添え字が0の配列は操作に関与せず、配列を作成するときにn + 1が必要です(
int arr [] = new int [n + 1];など)。
問題解決のアイデア
絶対値を取得するメソッドを個別に定義し、絶対値を取得するときはいつでもこのメソッドを呼び出します
コード
import java.util.Scanner;
public class Main {
//蓝桥杯要求class命名为Main,且无package
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n=scanner.nextInt();
int arr[] = new int[n+1];
int max=0;
for(int i=1;i<n+1;i++){
arr[i]=scanner.nextInt();
}
for(int i=1;i<n+1;i++){
for(int j=i+1;j<n+1;j++){
int distance = f(j,i)+f(arr[i],arr[j]); //distance代表距离
if(distance>max){
max=distance;
}
}
}
System.out.println(max);
}
public static int f(int a,int b){
//取绝对值
return a>=b?a-b:b-a; //返回绝对值
}
}