足したり引いたり (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");
}
}
}
となりました。