2022-04-27
분명 C언어 공부 1번 2번 풀다가 때려쳤던 기억이 있는데 스무스하게 잘 풀려서 코테 짬이 쌓였구나 싶었다.
1
#include <stdio.h>
void print_array(int (*arr)[4]) {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
printf("\n");
}
void rotate_right_90(int (* arr)[4]) {
int copy[4][4]; // 이걸 처음에 int (* copy)[4] = arr; 해서
// 내가 바꾸는 대로 바뀌고 있어서 이상한 값이 나오고 있었다.
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
copy[i][j] = arr[i][j];
}
}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
arr[j][3 - i] = copy[i][j];
}
}
print_array(arr);
}
int main() {
int arr[4][4];
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
arr[i][j] = 4 * i + j + 1;
}
}
print_array(arr);
rotate_right_90(arr);
rotate_right_90(arr);
rotate_right_90(arr);
}
2
#include <stdio.h>
int arr[100][100];
int count = 1;
void left_to_right(int row, int min, int max) {
for (int i = min ; i < max ; i++) {
arr[row][i] = count;
count++;
}
}
void right_to_left(int row, int max, int min) {
for (int i = max - 2 ; i >= min ; i--) {
arr[row][i] = count;
count++;
}
}
void top_to_bottom(int col, int min, int max) {
for (int i = min + 1 ; i < max ; i++) {
arr[i][col] = count;
count++;
}
}
void bottom_to_top(int col, int max, int min) {
for (int i = max - 2 ; i >= min + 1 ; i--) {
arr[i][col] = count;
count++;
}
}
void snail_array(int n) {
int min = 0;
int max = n;
for (int i = 0; i < n / 2; i++) {
left_to_right(i, min, max);
top_to_bottom(n-1 - i, min, max);
right_to_left(n-1 - i, max, min);
bottom_to_top(i, max, min);
min++;
max--;
}
if (n % 2 == 1) {
arr[n/2][n/2] = count;
}
}
int main() {
int n;
printf("숫자를 입력하시오 : ");
scanf("%d", &n);
snail_array(n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%3d ", arr[i][j]);
}
printf("\n");
}
}
3
#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
printf("난수의 범위: 0부터 100까지\n"); // RANDMAX 라는 rand 함수의 MAX 값 상수 이용 가능.
for(i = 0; i < 5; i++) {
printf("난수 출력: %d\n", rand() % 100);
}
return 0;
}
4
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
// int seed;
// printf("씨드 값 입력 : ");
// scanf("%d", &seed);
// scrand(seed);
srand((int)time(NULL));
for(int i = 0; i < 2; i++) {
printf("주사위 %d의 결과 : %d\n", i + 1, rand() % 6 + 1);
}
return 0;
}
5
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define WIN 2
#define DRAW 1
#define LOSE 0
int win_count = 0;
int draw_count = 0;
int lose_count = 0;
char rsp[3][10] = {"바위\0", "가위\0", "보\0"};
// 유저 인풋을 넣으면 컴퓨터가 고르고 이겼는지 비겼는지 졌는지 반환.
int rock_scissers_paper(int user) {
int com = rand() % 3 ;
printf("당신은 %s 선택, 컴퓨터는 %s 선택, ", rsp[user], rsp[com]);
if (user == com) {
draw_count++;
return DRAW;
} else if (com + 1 == user % 3) {
win_count++;
return WIN;
} else {
lose_count++;
return LOSE;
}
}
// 해당 반환값을 바탕으로 화면에 출력.
void print_result(int result) {
switch (result) {
case LOSE: printf("당신이 졌습니다!\n"); break;
case DRAW: printf("비겼습니다!\n"); break;
case WIN: printf("당신이 이겼습니다!\n"); break;
default: break;
}
}
int main() {
int user_rsp;
int res;
printf("바위는 1, 가위는 2, 보는 3 :");
scanf("%d", &user_rsp);
user_rsp--; // 지고 이기는 관계를 수식으로 표현하고 싶은데 0 1 2 가 아니라 1 2 3 인게 복잡해서, 그냥 user input 에서 1 뺐다.
srand((int)time(NULL));
// 처음 한번은 해야하고 질때까지 계속 되어야 하니 do~while
do {
res = rock_scissers_paper(user_rsp);
print_result(res);
} while (res != LOSE)
printf("%d승, %d무\n", win_count, draw_count);
}
6
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int strike_count = 0;
int ball_count = 0;
void baseball_game(int *com, int *user) {
strike_count = 0;
ball_count = 0;
// 자리까지 다 같으면 strike
for(int i = 0; i < 3; i++) {
if (com[i] == user[i]) {
strike_count++;
}
}
// 자리는 다르면 ball 인데, 이건 자리 같은 것까지 잡아내기 때문에
for(int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (com[i] == user[j]) {
ball_count++;
}
}
}
ball_count -= strike_count; // strike 카운트를 뺌.
}
int main() {
int res;
int count = 1;
int com[3];
int user[3];
printf("Start Game!\n");
srand((int)time(NULL));
for (int i = 0; i < 3; i++) {
int r = rand() % 10;
for (int j = 0; j < i; j++) {
if (com[j] == r) {
i--;
break;
}
}
com[i] = r;
printf("%d ", com[i]);
}
printf("\n");
do {
printf("3개의 숫자 선택 : ");
scanf("%d %d %d", &user[0], &user[1], &user[2]);
baseball_game(com, user);
printf("%d번째 도전 결과 : ", count);
printf("%dstrike, %dball!\n", strike_count, ball_count);
count++;
} while( strike_count != 3 );
printf("Game Over!\n");
}
'Language > C' 카테고리의 다른 글
[윤성우의 열혈 C프로그래밍] 도전 프로그래밍4 풀이 (1) | 2023.11.12 |
---|---|
[윤성우의 열혈 C프로그래밍] 도전 프로그래밍2 풀이 (0) | 2023.11.12 |
[윤성우의 열혈 C프로그래밍] 도전 프로그래밍1 풀이 (1) | 2023.11.12 |