新年おめでとうございます!本年もよろしくお願いします。
さて、まず今回のサムネですが、今流行りのAIに作成してもらいました。想像の斜め上をいく仕上がりが面白いですね。今年もキーワードはAIになりそうです、それくらいここ最近のAIの進歩は凄まじいです。
お題
さて、毎年恒例の新年一発目お題です。2025という数字は非常に特色的な数で45✕45で表すことのできる平方数なのです。ちなみに西暦が平方数になった前回の年号は1936年、次に平方数になる年号は2116年。つまり私が人生で体験できる唯一の平方数年ということになります。ある意味とても貴重な年号なのです。
ではここでJavaのお題として、ある数字が入力されたときそれが平方数なのかどうかを判定するプログラムを作成してみましょう。
[実行例1]
正の整数を入力>>2025
2025は平方数です(45*45)
[実行例2]
正の整数を入力>>12
12は平方数ではありません。
レッツチャレンジ!
いろいろな方法がありそうですね。paizaの問題でいうとCランクくらいでしょうか?
是非チャレンジしてみてください!
解答例
シンプルにfor文で回すというのがまず考えられます。
import java.util.Scanner;
public class YearApp {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("正の整数を入力>>");
int year = sc.nextInt();
for(int i=1;i<=year;i++) {
if(i*i == year) {
System.out.printf("%dは平方数です(%d*%d)%n", year,i,i);
break;
}
if(i*i> year) {
System.out.printf("%dは平方数ではありません%n", year);
break;
}
}
}
}
Math.sqrt()
を使うことで、平方根を一度に求めることができ、より直感的に平方数かどうかを判定できます。
9の場合 Math.sqrt(9) -> 3.0 -> intでキャスト -> 3
10の場合Math.sqrt(10)->3.1622776601683795 ->intでキャスト->3
この数を2乗してみてもとの整数と一致するかを判定します。こちらのほうがよりダイレクトですね。
import java.util.Scanner;
public class YearApp {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("正の整数を入力>>");
int year = sc.nextInt();
int rootYear=(int)Math.sqrt(year);
if(rootYear*rootYear == year) {
System.out.printf("%dは平方数です(%d*%d)%n", year,rootYear,rootYear);
}else {
System.out.printf("%dは平方数ではありません%n", year);
}
}
}
コメント