数値スケールのセグメンテーション組成物(ロス・バレーP1008、P1618解釈、Java言語の記述)

P1008の質問は尋ねました

P1008トピックのリンク
ここに画像を挿入説明

P1618の質問は尋ねました

P1618トピックのリンク
ここに画像を挿入説明

分析

P1618 P1008は、まだ非常に簡単な水がないので、このような水問題の拡張バージョンですが、。

実際には、裁判官()関数は、それから、二つの質問を共有することができ、唯一の「スロットがいっぱいです」が何であるかを決定することです。ピットビットのためにそこに計上されている場合は、上のようにaが思いました。

main()の基本的なプロセスでは、その後、何も特別なアルゴリズム、ライン上に列挙暴力があります。
最初の質問が1であるため、:2:3、また、下限123は、333の狭い内部を通過することができ、制限されます。
それ以来、2番目の質問は、Aである:B:C、上限と下限が制限暴力千万人に1から999まで設定することができないが、すべての999から100になり、A、B、C、に制限を設定する必要があります間、これは)(裁判官の前にデータの範囲はRE(配列の境界を)避けることができることを確実にするために非常に重要です。

初めてP1618 WAは、サンプルを提出しました。
ここに画像を挿入説明

私は、テストデータ5を取得:

123 456 789
OUT
123 456 789

実際には、上記の問題は裁判官で制限する前にのために循環の制限であってはならないものでなければなら()と述べました。

P1008〜ACコード(Javaの記述言語)

public class Main {

    private static byte[] arr = new byte[9];

    public static void main(String[] args) {
        for (int i = 123; i < 333; i++) {
            arr = new byte[9];
            int two = 2*i, three = 3*i;
            if (judge(i) && judge(two) && judge(three)) {
                System.out.println(i + " " + two + " " + three);
            }
        }
    }

    private static boolean judge(int i) {
        int a = i / 100;
        int b = (i % 100) / 10;
        int c = i - a*100 - b*10;
        if (b == 0 || c == 0 || a == b || a == c || b == c || arr[a-1] == 1 || arr[b-1] == 1 || arr[c-1] == 1) {
            return false;
        }
        arr[a-1] = arr[b-1] = arr[c-1] = 1;
        return true;
    }
    
}

P1618〜ACコード(Javaの記述言語)

import java.util.Scanner;

public class Main {

    private static byte[] arr = new byte[9];

    private static boolean judge(int i) {
        int a = i / 100;
        int b = (i % 100) / 10;
        int c = i - a*100 - b*10;
        if (b == 0 || c == 0 || a == b || a == c || b == c || arr[a-1] == 1 || arr[b-1] == 1 || arr[c-1] == 1) {
            return false;
        }
        arr[a-1] = arr[b-1] = arr[c-1] = 1;
        return true;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt(), b = scanner.nextInt(), c = scanner.nextInt();
        scanner.close();
        boolean flag = false;
        for (int i = 1; i < 1000; i++) {
            arr = new byte[9];
            int one = a*i, two = b*i, three = c*i;
            if (one > 100 && one < 1000 && two > 100 && two < 1000 && three > 100 && three < 1000
                    && judge(one) && judge(two) && judge(three)) {
                flag = true;
                System.out.println(one + " " + two + " " + three);
            }
        }
        if (!flag) {
            System.out.println("No!!!");
        }
    }

}
公開された364元の記事 ウォンの賞賛623 ・は 40000 +を見て

おすすめ

転載: blog.csdn.net/weixin_43896318/article/details/104082508