1

私はこの演習Two Intervals Intersectionを解決しようとしています。ほぼすべての問題を解決したと思いますが、サンプル入力を試してみると 15 と 5 が得られ、その結果を並べ替えたいと考えています。間隔を空けてから重複を削除しますが、この問題を解決するためのより良いアプローチが必要です。入力 2 3 および 2 3 として入力すると、出力 2 3 および 2 3 として取得されるため、解決するためのより良いアプローチをお願いしますこの演習、より良いアイデア

手伝ってくれてありがとう

これはこれまでの私のコードです

import java.util.*;
public class TwoIntervalIntersection {
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        int n1 = sc.nextInt();
        int n2 = sc.nextInt();
        int n3 = sc.nextInt();
        int n4 = sc.nextInt();

        if(n1 >= n3 && n1 <= n4){
            System.out.print(n1);
            System.out.print(" ");
        }

        if(n2 >= n3 && n2 <= n4){
            System.out.print(n2);
            System.out.print(" ");
        }

        if(n3 >= n1 && n3 <= n2){
            System.out.print(n3);
            System.out.print(" ");
        }

       if(n4 >= n1 && n4 <= n2){
            System.out.print(n4);
        }
    }
}
4

1 に答える 1

2

コンソールで最終的に印刷する前に値を変更/交換/確認できるように、最後に印刷する前に保存する方が良いですが、あなたのアプローチは悪くありません。間隔が間違った方法で投稿された部分を修正するには、次のようにします。

public static void main(String args[]){

        Scanner sc = new Scanner(System.in);
        System.out.print("Enter interval one: ");
        int left1 = sc.nextInt();
        int right1 = sc.nextInt();
        System.out.print("Enter interval two: ");
        int left2 = sc.nextInt();
        int right2 = sc.nextInt();

        int end1 = 0;
        int end2 = 0;

        if(left1 >= left2 && left1 <= right2)
            end1 = left1;

        if(right1 >= left2 && right1 <= right2)
            end2 = right1;

        if(left2 >= left1 && left2 <= right1)
           end1 = left2;

       if(right2 >= left1 && right2 <= right1)
            end2 = right2;

       if(end1 > end2){
            int h= end1;
            end1 = end2;
            end2 = h;
        }

       System.out.println(end1 + " " + end2);
}

プログラムをさらに改善したい場合は、ユーザーが入力した間隔に対して同じスワップメカニズムを追加して、「1 15」の代わりに「15 1」と入力しても、プログラムは正しく動作します。

于 2012-11-24T06:49:15.177 に答える