Top >C言語、Java 練習プログラム集

5. 4ナンバーズ

■ Java による作成例

import java.io.*;
import java.util.*;

class Program05
{
    /**
    * main
    */

    public static void main(String[] args) throws IOException
    {
        Random RandObj = new Random();     // 乱数オブジェクト
        BufferedReader br = new BufferedReader(
                                new InputStreamReader(System.in));

        String  strRule =
            "4桁の数を当ててください。\n"
            + "同じ数字は1度しか使用されません。"
            + "最上位に0が使用される場合もあります。\n"
            + "ヒントとして、合っている数字の数と、"
            + "桁(位置)も合っている数字の数を示します。\n"
            + "答えが'4135'で入力が'0123'の場合、'数:2,桁:1'とヒントが出ます。\n"
            + "----------------------------------------------------\n";

        System.out.print( strRule );    // ルールを表示します

        int reply;

        do
        {
            int numbers[] = new int[4];

            // 数字の重複が無い4桁の数字を作成します
            do
            {
                numbers[0] = RandObj.nextInt(10);
                numbers[1] = RandObj.nextInt(10);
                numbers[2] = RandObj.nextInt(10);
                numbers[3] = RandObj.nextInt(10);
            } while ( ! ( numbers[0] != numbers[1]
                        && numbers[0] != numbers[2]
                        && numbers[0] != numbers[3]
                        && numbers[1] != numbers[2]
                        && numbers[1] != numbers[3]
                        && numbers[2] != numbers[3]));

            System.out.print("4桁の数を考えました!!\n");

            for (int turn = 1 ; ; turn++)
            {
                System.out.print("数を当ててください。\n");
                int num = Integer.parseInt(br.readLine());

                // 入力された数値を1桁ずつ配列に代入します
                int test[] = new int[4];

                test[3] = num % 10;
                test[2] = (num / 10) % 10;
                test[1] = (num / 100) % 10;
                test[0] = (num / 1000) % 10;

                int kazu = 0;
                int keta = 0;

                for (int i = 0; i < 4; i++)
                {
                    for (int j = 0; j < 4; j++)
                    {
                        if (numbers[i] == test[j])
                        {
                            kazu++;    // 数字が一致

                            if (i == j)
                                keta++;    // 桁も一致
                        }
                    }
                }

                if (keta == 4)
                {
                    System.out.print("おめでとう!! "
                                + turn + "回目で正解です。\n");
                    break;
                }
                else
                {
                    System.out.print("数:" + kazu
                                    + ",桁:" + keta + "\n");
                }
            }

            System.out.print("もう一度やりますか?(Yes:1 No:0)");
            reply = Integer.parseInt(br.readLine());

        } while (reply != 0);
    }
}
PAPER BOWL
NEZEN