【Java】鉄則本_A03_B03
読んでいる本
問題と提出した回答A03
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int K = sc.nextInt(); int[] P = new int[N]; int[] Q = new int[N]; for (int i = 0; i < N; i++) { P[i] = sc.nextInt(); } for (int i = 0; i < N; i++) { Q[i] = sc.nextInt(); } boolean flag = false; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (P[i] + Q[j] == K) { flag = true; break; } } } if (flag) { System.out.println("Yes"); } else { System.out.println("No"); } sc.close(); } }
2重のfor文を回す。
公式の回答:kyopro-tessoku/codes/java/chap01/answer_A03.java
問題と提出した回答B03
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[] A = new int[N]; for (int i = 0; i < N ; i++) { A[i] = sc.nextInt(); } boolean flag = false; for (int i = 0; i < N; i++) { for (int j = i+1; j < N; j++) { for (int k = j+1; k < N; k++) { if (A[i] + A[j] + A[k] == 1000) { flag = true; break; } } } } if (flag) { System.out.println("Yes"); } else { System.out.println("No"); } } }
3重のfor文。Nが100なので、多くとも100の3乗の100万回なので計算しきれる。
同じ商品を選択することは出来ないので、2重目(j)、3重目(k)のfor文の開始を工夫する必要があった。
- i
- j = i+1
- k = j + 1
として、同じ商品を選ばないようにしている。
TODO
- 他のA,B,C問題を解く
- 本の続きを読む
おわり。。