Dev fox
윤성우의 열혈 C 프로그래밍 도전3 본문
도전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 |