前回の練習問題の解答例

前回の3桁版ビット&ブローのプログラムから加筆・修正した部分を太い赤字で示した。
「重複しない3つの数字:」を「重複しない4つの数字:」に書き換えたところ以外は全て加筆である。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
	int num1, num2, num3, num4;
	int user, user1, user2, user3, user4;
	int hit, blow, count;
	
	//当たりの数値を決める
	srand(time(NULL));
	num1=rand()%10;
	while (1) {
		num2=rand()%10;
		if (num2!=num1) {
			break;
		}
	}
	while (1) {
		num3=rand()%10;
		if (num3!=num1 && num3!=num2) {
			break;
		}
	}
	while (1) {
		num4=rand()%10;
		if (num4!=num1 && num4!=num2 && num4!=num3) {
			break;
		}
	}
	//printf("%d%d%d%d\n",num4,num3,num2,num1);	//動作確認用(本番は使わない)
	
	//ゲーム開始
	count=1;
	printf("重複しない4つの数字:");
	while(1) {
		while (1) {
			scanf("%d",&user);
			user4=user/1000;
			user3=(user/100)%10;
			user2=(user/10)%10;
			user1=user%10;
			if (user1!=user2 && user1!=user3 && user2!=user3 && user1!=user4 && user2!=user4 && user3!=user4) {
				break;
			}
			printf("重複してます!重複しない4つの数字:");
		}
		
		//当たったら終了
		if (user1==num1 && user2==num2 && user3==num3 && user4==num4) {
			break;
		}
		
		//はずれたらヒット数とブロー数を表示
		hit=0;
		blow=0;
		if (user1==num1) {
			hit++;
		}
		if (user2==num2) {
			hit++;
		}
		if (user3==num3) {
			hit++;
		}
		if (user4==num4) {
			hit++;
		}
		if (user1==num2 || user1==num3 || user1==num4) {
			blow++;
		}
		if (user2==num1 || user2==num3 || user2==num4) {
			blow++;
		}
		if (user3==num1 || user3==num2 || user3==num4) {
			blow++;
		}
		if (user4==num1 || user4==num2 || user4==num3) {
			blow++;
		}
		printf("%dヒット%dブロ−\n",hit,blow);
		printf("次の数値:");
		count++;
	}
	printf("%d回で当たりました!\n",count);
	return 0;
}