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

5. 4ナンバーズ

■ C 言語による作成例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

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

    srand( (unsigned int)time( 0 ) );

    printf( szRule );    // ルールを表示します

    do
    {
        int turn;
        int numbers[4];

        // 数字の重複が無い4桁の数字を作成します
        do
        {
            numbers[0] = rand() % 10;
            numbers[1] = rand() % 10;
            numbers[2] = rand() % 10;
            numbers[3] = rand() % 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] ) );

        printf( "4桁の数を考えました!!\n" );

        for( turn = 1 ; ; turn++ ){
            int num;
            int test[4];
            int kazu = 0;
            int keta = 0;
            int i, j;

            printf( "数を当ててください。\n" );
            scanf( "%d", &num );

            // 入力された数値を1桁ずつ配列に代入します
            test[3] = num % 10;
            test[2] = ( num / 10 ) % 10;
            test[1] = ( num / 100 ) % 10;
            test[0] = ( num / 1000 ) % 10;

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

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

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

        printf( "もう一度やりますか?(Yes:1 No:0)" );
        scanf( "%d", &reply );

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