도전! 프로그래밍3 정답

도전 1

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void printArr(int (*ary)[4], int col) {
	for (int i = 0; i < col; i++) {
		for (int j = 0; j < 4; j++) {
			printf("%d ", ary[i][j]);
		}
		printf("\n");
	}
	printf("\n");
}

void rotateArr(int (*ary)[4], int col) {
	int temp[4][4];
	for (int i = 0; i < 4; i++) {
		for (int j = col - 1; j >= 0; j--) {
			temp[i][col - j - 1] = ary[j][i];
		}
	}
	for (int i = 0; i < col; i++) {
		for (int j = 0; j < 4; j++) {
			ary[i][j] = temp[i][j];
		}
	}
}

int main(void) {
	int arr[4][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16} };
	printArr(arr, sizeof(arr) / sizeof(arr[0]));
	for (int i = 0; i < 3; i++) {
		rotateArr(arr, sizeof(arr) / sizeof(arr[0]));
		printArr(arr, sizeof(arr) / sizeof(arr[0]));
	}
	return 0;
}


도전 2

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void printArr(int (*ary)[10], int num) {
	for (int i = 0; i < num; i++) {
		for (int j = 0; j < num; j++) {
			printf("%d ", ary[i][j]);
		}
		printf("\n");
	}
	printf("\n");
}

void snailArr(int (*ary)[10], int num) {
	int Hlimit = num - 1;  // 배열 좌표의 상한선
	int Llimit = 0;  // 배열 좌표의 하한선
	int x = 0, y = 0;
	int s = 1;
	while (s <= num * num) {
		if (Llimit == Hlimit) {  // num이 홀수이고 x와 y가 배열의 정가운데를 가리킬 때
			ary[y][x] = s;
			break;
		}
		for (; x < Hlimit; x++) {
			ary[y][x] = s;
			s++;
		}
		for (; y < Hlimit; y++) {
			ary[y][x] = s;
			s++;
		}
		for (; x > Llimit; x--) {
			ary[y][x] = s;
			s++;
		}
		for (; y > Llimit; y--) {
			ary[y][x] = s;
			s++;
		}
		x++;
		y++;
		Llimit++;
		Hlimit--;
	}
}

int main(void) {
	int n;
	int arr[10][10];  // 비주얼 스튜디오의 VLA 미지원으로 인해 부득이하게 배열 최대 크기 10x10으로 지정
	printf("숫자를 입력하시오 : ");
	scanf("%d", &n);
	snailArr(arr, n);
	printArr(arr, n);
	return 0;
}

배열의 테두리를 바깥쪽부터 한겹씩 만든다는 생각으로 코드를 짰다.


도전 3

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main(void) {
	int i;
	printf("난수의 범위 : 0부터 99까지 \n");
	for (i = 0; i < 5; i++)
		printf("난수 출력 : %d \n", rand() % 100);  // 100으로 나누면 나머지는 0 ~ 99까지 나올수 있음
	return 0;
}


도전 4

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

int main(void) {
	srand((int)time(NULL));
	printf("주사위 1의 결과 : %d\n", rand() % 6 + 1);  // 6으로 나누면 나머지는 0 ~ 5사이가 나옴
	printf("주사위 2의 결과 : %d\n", rand() % 6 + 1);  // 0은 주사위에서 나올 수 없으므로 1을 더해 1 ~ 6까지 나오도록 조정
	return 0;
}


도전 5

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

int main(void) {
	int user;
	int computer;
	int win = 0;
	int draw = 0;
	while (1) {
		srand((int)time(NULL));
		computer = rand() % 3 + 1;
		printf("바위는 1, 가위는 2, 보는 3 : ");
		scanf("%d", &user);

		switch (user) {
		case 1 :
			printf("당신은 바위 선택, ");
			break;
		case 2 : 
			printf("당신은 가위 선택, ");
			break;
		case 3 :
			printf("당신은 보 선택, ");
			break;
		}

		switch (computer) {
		case 1:
			printf("컴퓨터는 바위 선택, ");
			break;
		case 2:
			printf("컴퓨터는 가위 선택, ");
			break;
		case 3:
			printf("컴퓨터는 보 선택, ");
			break;
		}

		if ((user == 1 && computer == 2) ||
			(user == 2 && computer == 3) ||
			(user == 3 && computer == 1)) {
			printf("당신이 이겼습니다!\n");
			win++;
		}
		else if (user == computer) {
			printf("비겼습니다!\n");
			draw++;
		}	
		else {
			printf("당신이 졌습니다!\n");
			printf("게임의 결과 : %d승, %d무\n", win, draw);
			break;
		}
	}
	return 0;
}


도전 6

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

int main(void) {
	srand((int)time(NULL));
	int computer[3] = {0};
	while (computer[0] == computer[1] ||
		computer[1] == computer[2] ||
		computer[0] == computer[2]) {
		for (int i = 0; i < 3; i++) {
			computer[i] = rand() % 10;
		}
	}
	int user[3];
	int strike, ball, n = 1;

	printf("Start Game!\n");
	while (1) {
		strike = 0;
		ball = 0;
		printf("3개의 숫자 선택 : ");
		scanf("%d %d %d", &user[0], &user[1], &user[2]);

		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				if ((user[i] == computer[j]) && (i == j))  // 숫자와 위치가 같을 때
					strike++;
				if ((user[i] == computer[j]) && (i != j))  // 숫자만 같고 위치는 다를 때
					ball++;
			}
		}
		printf("%d번째 도전 결과 : %dstrike, %dball!!\n", n, strike, ball);
		if (strike == 3)
			break;
		else 
			n++;
	}
	printf("\n");
	printf("Game Over!\n");
	return 0;
}


개인적으로 도전 2가 시간도 오래 걸리고 제일 어려웠다.
아직 갈 길이 먼듯...

좋은 웹페이지 즐겨찾기