연재 완료/C Lang 예제코드 모음

C언어 실습문제 풀이 CH7 (1,2)

라이피 (Lypi) 2018. 5. 14. 21:51
반응형

1. 난수 발생함수를 이용하여 만든 주사위 눈을 알아맞히는 게임을 작성하라.

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

int main(void)
{
	srand((unsigned)time(NULL));

	int dice_value, dot;
	int input;
	int ch;
	
	while (1) {

		dice_value = rand();

		printf("\n");
		printf("1. 시작 \n");
		printf("2. 종료 \n");
		scanf_s("%d", &ch);

		switch (ch) {
		case 1:

			printf("\n");
			printf("주사위 눈수를 입력해주세요 : "); scanf_s("%d", &dot);
			do {

				printf("\n");
				printf("주사위 눈 수를 맞춰보세요. 포기하시려면 범위 밖의 수를 입력하세요 : "); scanf_s("%d", &input);
				
				if (input <= 0 || input > dot+1) {
					break;
				}

				if (input == (dice_value % dot) + 1) {
					printf("\n");
					printf("맞추셨습니다. \n");
					printf("초기화면으로 돌아갑니다. \n");
					break;
				}

				printf("\n");
				printf("입력하신 %d는 답이 아닙니다. \n", input);

			} while (input != (dice_value % dot) + 1);


			break;

		case 2:
			return 0;
			break;

		default :
			printf("\n");
			printf("잘못 입력하셨습니다. 다시 입력하세요. \n");
			break;
		}

	}
	
}


2. 난수 발생함수를 이용하여 로또복권(6/45)의 6개의 수를 중복됨이 없이 뽑는 프로그램을 작성하라.

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

int main(void)
{
	srand((unsigned)time(NULL));

	int lotto[6];
	int temp;

	temp = (rand() % 45) + 1;

	//중복없이 뽑기
	for (int i = 0; i < 6; i++) {
		for (int k = 0; k < i; k++) {

			if (lotto[k] == temp) {			//중복된게 있으면
				temp = (rand() % 45) + 1;	//다시 뽑고
				k = 0;						//처음부터 다시 검사한다.
			}
		}
		lotto[i] = temp;
	}


	//요즘 애용하고 있는 삽입정렬로 오름차순 정렬.
	for (int i = 0; i < 6 - 1; i++) {
		for (int k = i + 1; k < 6; k++) {
			//값 교환은 xor swap으로
			if (lotto[i] > lotto[k]) {
				lotto[i] ^= lotto[k];
				lotto[k] ^= lotto[i];
				lotto[i] ^= lotto[k];
			}
		}
	}


	//출력
	for (int i = 0; i < 6; i++) {
		printf("%2d ", lotto[i]);
	}
	
}


반응형