@roimin2

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

足したり引いたり (paizaランク C 相当)の方針の解説

解決したいこと

に記載のJavaの解説で
「本問題は N ± A ± B が 0 になるか判定する問題です。
Nが 0 になる場合は全部で 4 通り考えられます。
N + A + Bが 0 になる場合
N + A - Bが 0 になる場合
N - A + Bが 0 になる場合
N - A - Bが 0 になる場合
これらをすべて試して、どれかが 0 になる場合はYESを出力します。」
とありました。
どこからN + A + Bなどのくだりが出るのかが分からないので、解説していただければと思います。
自分で解いた時は
まず 1. NにAを足す、またはNからAを引くをそのまま(n+a==0 || n-a==0)と判断し、2. NにBを足す、またはNからBを引くを(n+b==0 || n-b==0)と判断して解きました。
不正解になりました。
なので、なぜ1に搭乗してないBが出たり、2に登場していないAが出るのかが分かりません。解説お願いします。

正解のコード

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int a = sc.nextInt();
        int b = sc.nextInt();

        if (n + a + b == 0) {
            System.out.println("YES");
        } else if (n + a - b == 0) {
            System.out.println("YES");
        } else if (n - a + b == 0) {
            System.out.println("YES");
        } else if (n - a - b == 0) {
            System.out.println("YES");
        } else {
            System.out.println("NO");
        }

        sc.close();
    }
}

自分で試したこと

自力で解いた場合、まず 1. NにAを足す、またはNからAを引くをそのまま(n+a==0 || n-a==0)と判断し、2. NにBを足す、またはNからBを引くを(n+b==0 || n-b==0)と判断して解きました。
なので、なぜ1に搭乗してないBが出たり、2に登場していないAが出るのかが分かりません。解説お願いします。

import java.util.*;
public class Main {
    public static void main(String[] args) {
        /*整数N, A, B ( - 99 ≦ N, A, B ≦ 100 ) があります。以
        下の 2 つの操作をそれぞれ 1 回ずつおこなったとき、Nを 0 にできる場合はYES
        できない場合はNOを出力してください。
        1. NにAを足す、またはNからAを引く  (n+a==0 || n-a==0)
        2. NにBを足す、またはNからBを引く (n+b==0 || n-b==0)*/
        Scanner sc = new Scanner(System.in);
        int n =sc.nextInt();
        int a =sc.nextInt();
        int b =sc.nextInt();
        if ((n+a==0 || n-a==0) || (n+b==0 || n-b==0)){
            System.out.println("YES");
        }
        }else{
            System.out.println("NO");
        }
        
        
    }
}

となりました。

0 likes

1Answer

問題文がわかりづらいですが、問題文の解釈が誤っていると思います。

整数N, A, B ( - 99 ≦ N, A, B ≦ 100 ) があります。以下の 2 つの操作をそれぞれ 1 回ずつおこなったとき、Nを 0 にできる場合はYESを、できない場合はNOを出力してください。

  1. NにAを足す、またはNからAを引く
  2. NにBを足す、またはNからBを引く

「2つの操作をそれぞれ1回ずつおこなったとき、Nを0にできる」というのは、
「1の操作を行い、2の操作も行った後にNを0にできるか」を意味しています。

「1の操作を行った結果0になるか」もしくは「2の操作を行った結果0になるか」
ではないことに注意が必要です。

5Like

Comments

  1. @roimin2

    Questioner

    ありがとうございます!
    「1の操作を行い、2の操作も行った後にNを0にできるか」ということは
    N + A + Bが 0 になる場合(1でNにAを足すを選択し、2でNにBを足すを選択)
    N + A - Bが 0 になる場合(1でNにAを足すを選択し、2でNからBを引くを選択)
    N - A + Bが 0 になる場合(1でNからAを引くを選択し、2でNにBを足すを選択)
    N - A - Bが 0 になる場合(1でNからAを引くを選択し、2でNからBを引くを選択)
    なのですね!
    教えていただきありがとうございます!助かりました!

Your answer might help someone💌