[ Java練習問題 ] 練習問題 第5回 『繰り返し処理 ③』

目次

繰り返しと条件分岐の複合問題

Java練習問題 第5回では「繰り返し処理」についての問題を用意してあります。
「繰り返し処理」の解説はこちら

問題 13 難易度★★★★

① 「先に 2 勝した方を優勝とする、じゃんけんゲームプログラム」、を作成してください。

実行例

じゃんけんゲーム始めるよー
PC と勝負です!
先に 2 勝した方が優勝です!!
第 1 回戦:あなたの手を数字で選んでください
0:ぐー 1:ちょき 2:ぱー
0
あなたの手は「ぐー」、PC の手は「ちょき」。
あなたの勝ちです。
あなた:1 勝、PC:0 勝、あいこ:0 回
第 2 回戦:あなたの手を数字で選んでください
0:ぐー 1:ちょき 2:ぱー
1
あなたの手は「ちょき」、PC の手は「ぐー」。
PC の勝ちです。
あなた:1 勝、PC:1 勝、あいこ:0 回
第 3 回戦:あなたの手を数字で選んでください
0:ぐー 1:ちょき 2:ぱー
2
あなたの手は「ぱー」、PC の手は「ちょき」。
PC の勝ちです。
あなた:1 勝、PC:2 勝、あいこ:0 回
ゲーム終了! 優勝者は PC です

問題 13 解答

正解は、、、
public class Main_0313 {
  public static void main(String[] args) {
    System.out.println("じゃんけんゲーム始めるよー");
    System.out.println("PC と勝負です!");
    System.out.println("先に 2 勝した方が優勝です!!\n");
    
    int userWin = 0;//ユーザー勝利回数
    int pcWin = 0;//PC 勝利回数
    int draw = 0;//あいこの回数
    
    while (userWin < 2 && pcWin < 2) {//どちらかが二勝するまで繰り返す
      System.out.print("" + (userWin + pcWin + draw + 1) + "回戦:");
      System.out.println("あなたの手を数字で選んでください");
      System.out.println("0:ぐー 1:ちょき 2:ぱー");
      int userHand = new java.util.Scanner(System.in).nextInt();
      int pcHand = new java.util.Random().nextInt(2);
      
      String strUserHand = "";
      if (userHand == 0) {
        strUserHand = "ぐー";
      } else if (userHand == 1) {
        strUserHand = "ちょき";
      } else if (userHand == 2) {
        strUserHand = "ぱー";
      }
      String strPcHand = "";
      if (pcHand == 0) {
        strPcHand = "ぐー";
      } else if (pcHand == 1) {
        strPcHand = "ちょき";
      } else if (pcHand == 2) {
        strPcHand = "ぱー";
      }
      System.out.println(
      "あなたの手は「" + strUserHand + "」、"
      + "PC の手は「" + strPcHand + "」。");
      String result = "";
      switch (userHand - pcHand) {
      case -2:
      case 1:
        result = "PC の勝ち";
        pcWin++;
        break;
      case -1:
      case 2:
        result = "あなたの勝ち";
        userWin++;
        break;
      case 0:
        result = "あいこ";
        draw++;
        break;
      default:
        break;
      }
      System.out.println(result + "です。");
      System.out.println(
      "あなた:" + userWin + "勝、"
      + "PC:" + pcWin + "勝、"
      + "あいこ:" + draw + "\n");
    }
    String winner = "";
    if (pcWin > userWin) {
      winner = "PC";
    } else {
      winner = "あなた";
    }
    System.out.println("ゲーム終了! 優勝者は" + winner + "です");
  }
}

問題 14 難易度 ★★

① 以下の実行結果例となるような、試験結果集計プログラムを作成してください。
なお、点数がマイナスの場合も正しく処理できるように注意してください。

実行例

生徒の人数を整数で入力してください
4
1 番目の生徒の点数を入力してください。
25
2 番目の生徒の点数を入力してください。
-5
3 番目の生徒の点数を入力してください。
33
4 番目の生徒の点数を入力してください。
50
4 人の生徒の平均点は、25.75 点です。
最高点は、50 点です。
最低点は、-5 点です。

問題 14 解答

正解は、、、
public class Main_0314 {
  public static void main(String[] args) {
    System.out.println("生徒の人数を整数で入力してください");
    int num = new java.util.Scanner(System.in).nextInt();
    int sum = 0;//合計点
    int min = 0;//最低点
    int max = 0;//最高点
    
    for (int i = 0; i < num; i++) {//人数分繰り返し
      System.out.println();
      System.out.println((i + 1) + "番目の生徒の点数を入力してください。");
      int score = new java.util.Scanner(System.in).nextInt();
      sum += score;
      if (i == 0) { //0 番目の生徒の得点を、暫定最高点と暫定最低点とする。
        min = score;
        max = score;
      } else {
        if (score < min) {
          min = score;
        }
        if (score > max) {
          max = score;
        }
      }
    }
    System.out.println();
    System.out.println(num +"人の生徒の平均点は、"+ ((double) sum / num) +"点です。");
    System.out.println("最高点は、" + max + "点です。");
    System.out.println("最低点は、" + min + "点です。");
  }
}

繰り返し文を使用したアルゴリズムを考える

問題 15 難易度 ★★★

① 素数判定プログラムを作成してください。

実行例

素数判定したい整数を入力してください
9999991
9999991 は素数です

問題 15 解答

正解は、、、
public class Main_0315 {
  public static void main(String[] args) {
    System.out.println("素数判定したい整数を入力してください");
    long num = new java.util.Scanner(System.in).nextLong();
    String res = "素数です";
    for (long i = 2; i < num; i++) {
      if (num % i == 0) {
      res = "素数ではありません";
      break;
      }
    }
    System.out.println(num + "" + res);
  }
} //これは単純なアルゴリズムです。もっと早い処理も考えてみましょう。

問題 16 難易度 ★★★

① 5 億以下の数で、もっとも大きな素数を出力して下さい。
② 5 億以上の数で、もっとも小さな素数を出力して下さい。

実行例

5 億以下の数で、もっとも大きな素数は、499999993 です。
5 億以上の数で、もっとも小さな素数は、500000003 です。

問題 16 解答

正解は、、、
public class Main_0316 {
  public static void main(String[] args) {
    int num1 = 500000000;
    for (int i = num1; i > 0; i--) {
      boolean isPrime = true;
      for (int j = 2; j < i; j++) {
        if (i % j == 0) {
          isPrime = false;
          break;
        }
      }
      if (isPrime) {
        System.out.println("5 億以下の数で、もっとも大きな素数は、"+ i +" です。");
        break;
      }
    }
  
    int num2 = 500000000;
    while (true) {
      boolean isPrime = true;
      for (int j = 2; j < num2; j++) {
        if (num2 % j == 0) {
          isPrime = false;
          break;
        }
      }
      if (isPrime) {
        System.out.println("5 億以上の数で、もっとも小さな素数は、"+ num2 +" です。");
        break;
      }
      num2++;
    }
  }
} //これは単純なアルゴリズムです。もっと早い処理も考えてみましょう。

問題 17 難易度 ★★★★

① 30 以下の素数を列挙するプログラムを作成してください。

実行例

2 3 5 7 11 13 17 19 23 29

問題 17 解答

正解は、、、
public class Main_0317 {
  public static void main(String[] args) {
    for (int i = 2; i <= 30; i++) {
      boolean isPrimeNumber = true;
      for (int j = 2; j < i; j++) {
        if (i % j == 0) {
          isPrimeNumber = false;
          break;
        }
      }
      if (isPrimeNumber) {
        System.out.print(i + " ");
      }
    }
  }
} //これは単純なアルゴリズムです。もっと早い処理も考えてみましょう

Java練習問題 第6回では「配列」から出題します。

(Visited 153 times, 1 visits today)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次