詳細
A
問題
与えられた文字列の中に ab
もしくは ba
が含まれているか。
コード
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
scanner.next();
String S = scanner.next();
scanner.close();
System.out.println(S.contains("ab") || S.contains("ba") ? "Yes" : "No");
}
}
B
問題
与えられた整数を B として、
X^X = B
となるような X を出力する。
また、B の範囲は
1 \leq B \leq 10^{18}
である。
コード
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long B = Long.parseLong(scanner.next());
BigDecimal b = new BigDecimal(B);
scanner.close();
for (int i=1;i<16;i++) {
BigDecimal x = new BigDecimal(i);
if (x.pow(i).equals(b)) {
System.out.println(i);
return;
}
}
System.out.println("-1");
}
}
ループの範囲は
15^{15} = 4.379 * 10^{17}
16^{16} = 1.845 * 10^{19}
から設定するとして、気を付けなくてはいけないのは累乗の計算をする部分である。
Math.pow
を使用すると内部での誤差が無視できない大きさになるので今回は使わない。
代わりに BigDecimal
型を使用する。
import java.math.*;
class HelloWorld {
public static void main(String[] args) {
// 普通の Math.pow
System.out.println(Math.pow(15,15));
// BigDecimal の pow
BigDecimal a = new BigDecimal(15);
System.out.println(a.pow(15));
}
}
/*
4.3789389038085939E17
437893890380859375
*/
また、 BigDecimal
では数値の比較を equals
メソッドで行う。==
演算子は使わない。
C
問題
与えられた数独が正しいかを判定する。
コード
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[][] A = new int[9][9];
int flag = 0;
for (int i=0;i<9;i++) {
Set<Integer> set = new HashSet<>();
for (int j=0;j<9;j++) {
int a = Integer.parseInt(scanner.next());
A[j][i] = a;
set.add(a);
}
if (set.size() != 9) flag = 1;
}
scanner.close();
if (flag == 1) {
System.out.println("No");
return;
}
Set<Integer> set = new HashSet<>();
for (int x=0;x<9;x++) {
set.clear();
for (int y=0;y<9;y++) {
set.add(A[x][y]);
}
if (set.size() != 9) {
System.out.println("No");
return;
}
}
for (int i=0;i<9;i+=3) {
for (int j=0;j<9;j+=3) {
set.clear();
for (int ii=0;ii<3;ii++) {
for (int jj=0;jj<3;jj++) {
set.add(A[i+ii][j+jj]);
}
}
if (set.size() != 9) {
System.out.println("No");
return;
}
}
}
System.out.println("Yes");
}
}