ブルーブリッジカップ:最大距離(質問解決のアイデア)

トピック

[問題の説明]
   シーケンス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; //返回绝对值
    }
}

おすすめ

転載: blog.csdn.net/qq_47168235/article/details/108911800