Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

Dev fox

윤성우의 열혈 C 프로그래밍 도전3 본문

C

윤성우의 열혈 C 프로그래밍 도전3

나른한여우 2024. 2. 20. 00:52

도전1)

 

길이가 4x4인 int형 2차원 배열을 오른쪽으로 90도씩 회전시키는 문제

void spinArray(int a, int(*arr)[4]) {

	static int index = 0;
	
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 4; j++) {
			printf("%3d ", arr[i][j]);
		}
		printf("\n");
	}

	int tempArr[4][4];
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 4; j++) {
			tempArr[i][j] = arr[3 - j][i];
		}
	}

	printf("\n");
	index++;

	if (index > a) {
		return;
	}

	spinArray(a, tempArr);

}

int main(void) {

	int arr[4][4] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 };
	spinArray(3, arr);
    
    return 0;
    
}​

 

도전2)

 

숫자를 입력해 달팽이처럼 배열을 구성시키는 문제

int num;
int arr[10][10];
int x=0, y=-1;
int index=1;

printf("숫자를 입력하시오 : ");
scanf_s("%d", &num);

int temp = num;

for (int i = 0; i < num; i++) {
	y++;
	arr[x][y] = index;
	index++;
}

temp--;

for (int i = 0; i < 2*(num - 1); i++) {

	for (int j = 0; j < temp; j++) {
		x++;
		arr[x][y] = index;
		index++;
	}

	for (int j = 0; j < temp; j++) {
		y--;
		arr[x][y] = index;
		index++;
	}
	temp--;

	for (int j = 0; j < temp; j++) {
		x--;
		arr[x][y] = index;
		index++;
	}

	for (int j = 0; j < temp; j++) {
		y++;
		arr[x][y] = index;
		index++;
	}
	temp--;
}

for (int i = 0; i < num; i++) {
	for (int j = 0; j < num; j++) {
		printf("%3d ", arr[i][j]);
	}
	printf("\n");
}

 

int temp를 따로 사용하지않고 아래,왼쪽 / 위,오른쪽 움직임을 구분하는 플레그를

만들어서 코드를 작성했어도 됐을 것 같다.

 

도전 3

0~99 범위의 난수 생성 구현 (의사 난수 반환)

int i;
printf("난수의 범위 : 0부터 %d까지 \n", 99);
for (i = 0; i < 5; i++)
	printf("난수 출력 : %d \n", rand()%100);

 

도전 4

두개의 주사위를 던졌을 때의 결과 출력

srand((int)time(NULL));

for (int i = 1; i < 3; i++) {
	int ranNum = (rand() % 6)+1;
	printf("주사위 %d의 결과 %d \n", i, ranNum);
}

 

도전 5

가위 바위 보

srand((int)time(NULL));
int win=0, lose=0, draw=0;
int num, cpuNum;

while (1) {
	printf("바위는 1, 가위는 2, 보는 3: ");
	scanf_s("%d", &num);
	cpuNum = (rand() % 3) + 1;
	
	if (num == 1) {
		if (cpuNum == 1) {
			printf("당신은 바위 선택, 컴퓨터는 바위 선택, 비겼습니다.\n");
			draw++;
		}
		else if (cpuNum == 2) {
			printf("당신은 바위 선택, 컴퓨터는 가위 선택, 이겼습니다.\n");
			win++;
		}
		else {
			printf("당신은 바위 선택, 컴퓨터는 보 선택, 졌습니다.\n");
			break;
		}
	}
	else if (num == 2) {
		if (cpuNum == 1) {
			printf("당신은 가위 선택, 컴퓨터는 바위 선택, 졌습니다.\n");
			break;
		}
		else if (cpuNum == 2) {
			printf("당신은 가위 선택, 컴퓨터는 가위 선택, 비겼습니다.\n");
			draw++;
		}
		else {
			printf("당신은 가위 선택, 컴퓨터는 보 선택, 이겼습니다.\n");
			win++;
		}
	}
	else {
		if (cpuNum == 1) {
			printf("당신은 보 선택, 컴퓨터는 바위 선택, 이겼습니다.\n");
			win++;
		}
		else if (cpuNum == 2) {
			printf("당신은 보 선택, 컴퓨터는 가위 선택, 졌습니다.\n");
			break;
		}
		else {
			printf("당신은 보 선택, 컴퓨터는 보 선택, 비겼습니다.\n");
			draw++;
		}
	}
}

printf("게임의 결과 : %d승, %d무 \n", win, draw);

 

중복되는 문자열은 배열로 처리했어도 됐을듯

 

도전 6

숫자야구

 

	int userNum[3];
	int cpuNum[3];
	int index = 1;
	srand((int)time(NULL));

	for (int i = 0; i < 3; i++)
		cpuNum[i] = rand() % 10;
	
	//컴퓨터 숫자 중복 방지
	while (1) 
	{
		int temp = 1;
		for (int i = 0; i < 2; i++) {
			for (int j = temp; j < 3; j++) {
				if (cpuNum[i] == cpuNum[j])
					cpuNum[j] = rand() % 10;
			}
			temp++;
		}

		if (cpuNum[0] != cpuNum[1] && cpuNum[0] != cpuNum[2] && cpuNum[1] != cpuNum[2])
			break;
	}

	printf("Start Game! \n");

	while (1) 
	{
		int strikeNum = 0, ballNum = 0;
		printf("3개의 숫자 선택: ");
		scanf_s("%d %d %d", &userNum[0], &userNum[1], &userNum[2]);

		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				if (i == j && cpuNum[i] == userNum[j])
					strikeNum++;
				if (i != j && cpuNum[i] == userNum[j])
					ballNum++;
			}
		}

		printf("%d번째 도전 결과: %d strike, %d ball!!\n", index, strikeNum, ballNum);
		index++;

		if (strikeNum == 3)
			break;
	}

	printf("Game Over!");

'C' 카테고리의 다른 글

C언어를 공부하면서 느낀점  (0) 2024.03.11
윤성우의 열혈 C 프로그래밍 도전4  (0) 2024.03.04