1. 포인터와 레퍼런스를 활용해 함수 외부에서 선언된 두 정수형 변수의 값을 서로 바꾸는 Swap 함수를 각각 구현하시오
void Swap(int* a, int* b)//포인터
{
int c = *a;
*a = *b;
*b = c;
}
void Swap(int& a, int& b)//래퍼런스
{
int c = a;
a = b;
b = c;
}
2. 1000미만의 3의 승수를 차례대로 출력하는 코드를 구현 하시오.
#include <iostream>
int main(void)
{
int a = 3;
while (a < 1000) // while문
{
std::cout << a << std::endl;
a *= 3;
}
for (int i = 3; i < 1000; i+= 3) // for문
{
std::cout << i << std::endl;
}
}
3. 다음의 형태로 * 을 출력하는 코드를 구현 하시오.
#include <iostream>
#define count 5//별 층수 변경 가능
int main(void)
{
int a = count - 1;
int b = 1;
for (int i = 0; i < count; i++)
{
for (int j = a; j > 0; j--)
{
std::cout << " ";
}
a -= 1;
for (int k = 0; k < b; k++)
{
std::cout << "*";
}
b += 2;
std::cout << std::endl;
}
}
4. 배열의 값을 오름차순으로 정렬해서 반환하는 함수를 구현 하시오.
int arr[5] = { 5, 2, 4, 1, 3 };
void sortArray(int* arr, int n)
{
…
}
sortArray(arr, 5);
// arr : [ 1, 2, 3, 4, 5 ]
#include <iostream>
void sortArray(int* arr, int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - (i + 1); j++)
{
if (arr[j] > arr[j + 1])// 앞뒤 비교
{
int change = arr[j + 1];//바꾸기
arr[j + 1] = arr[j];
arr[j] = change;
}
}
}
}
5. 로또 번호 생성기를 구현 하시오.
A. 최대 번호값과 생성 숫자 개수를 입력하면 해당 조건 내에서 중복되지 않는 숫자를 출력하는 로또 번호 생성기를 구현.
B. 최대값 : 60, 생성숫자 : 10 을 입력하면 1 ~ 60 사이의 중복되지 않는 숫자 10개를 생성한다.
#include <iostream>
void makeLotto(int max, int create)
{
srand(time(NULL));
if (create > max)
{
std::cout << "잘못된 입력";
return;
}
int* box = new int[create];//동적 배열
for (int i = 0; i < create; i++)
{
bool check = true;
box[i] = rand() % max + 1;
for (int j = 0; j < i; j++)
{
if (box[j] == box[i])
{
check = false;
--i;
break;
}
}
if (check == true)
{
std::cout << box[i] << std::endl;
}
}
}
int main(void)
{
int max;
int create;
std::cin >> max >> create;
makeLotto(max, create);
}
6. Joker를 포함한 53장의 카드를 섞은 후, 두 명의 플레이어에게 7장씩의 카드를 배분하는 프로그램을 만드시오.
A. ♠♣♥◆ 네 개의 기호 + 기호 별 각각 A, 2 ~ 10, J, Q, K 값의 카드 존재
B. 출력예시) Player 1 : ♥3, Joker, ♣A, ♣J, ◆1, ◆10, ♠4
Player 2 : ♥6, ◆2, ◆5, ♠Q, ♠K, ♣2, ♣3
void pick(std::string*card,int card_num, int player_, int pick)
{
if (player_ * pick > card_num)
{
std::cout << "The deck is empty";
return;
}
int* player = new int[pick * player_];
srand(time(NULL));
for (int i = 0; i < pick * player_; i++)
{
player[i] = rand() % 53;
for (int j = 0; j < i; j++)
{
if (player[j] == player[i])
{
i--;
break;
}
}
}
int player_num = 0;
for (int i = 0; i < player_; i++)
{
if (player_num + 1 < 10)
{
std::cout << "Player 0" << player_num + 1 << " : ";
}
else
{
std::cout << "Player " << player_num + 1 << " : ";
}
for (int c = pick * player_num; c < pick * (player_num + 1); c++)
{
std::cout << card[player[c]] << " ";
}
std::cout << std::endl;
player_num++;
}
}
int main(void)
{
const std::string mark[4] = { "♠","♥","◆","♣" };
const std::string num[13] = { "A ","2 ","3 ","4 ","5 ","6 ","7 ","8 ","9 ","10","J ","Q ","K " };
std::string card[53];
for (int k = 0; k < 52; k++)
{
card[k] = mark[k % 4] + num[k % 13];
}
card[52] = "Joke";
pick(card,53, 7, 7);// 카드 값,카드 수, 플레이어 수, 플레이어가 뽑는 카드 수
}
7. 1 ~ 25까지의 숫자가 랜덤하게 배치되는 5X5의 빙고게임 판을 생성한 후, 숫자 입력을 받을 때마다 해당 숫자를 지워주고 가로, 세로, 대각선의 빙고 줄이 완성될 때마다 빙고 개수를 갱신해서 표시해 주는 빙고 게임을 제작 하시오.
예시
19 79 16 23 20
5 13 10 14 24
6 12 18 2 4
21 3 7 11 1
15 25 22 8 9
현재 0줄의 빙고가 완성되었습니다.
숫자를 입력해 주세요 :
#include <iostream>
using namespace std;
#define size 5// 사이즈 조절 가능
int main(void)
{
bool num[size * size] = { false };
int bingo[size][size];
srand(time(NULL));
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
int random = rand() % (size * size);
if (num[random] == false)
{
num[random] = true;
bingo[i][j] = random + 1;
}
else
{
j--;
}
}
}
int clear = 0;//점수 체크용
bool check[size + size + 2] = {false};//빙고 중복 체크
while(clear < size + size + 2)
{
//빙고판
system("cls");
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (bingo[i][j] != false)//int false값 = 0
{
std::cout << bingo[i][j] << "\t";
}
else
{
std::cout << "\t";
}
}
std::cout << std::endl << std::endl;
}
//입력
int input;
std::cout << "현재 " << clear << "줄의 빙고가 완성되었습니다." << std::endl;
std::cout << "숫자를 입력해 주세요 : ";
std::cin >> input;
//숫자 지우기
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (bingo[i][j] == input)
{
bingo[i][j] = false;//인풋 값 false로 바꿈
break;
}
}
}
//이 부분 어쩌지
//가로 빙고 처리
for (int i = 0; i < size; i++)
{
bool bingo_check = true;
for (int j = 0; j < size; j++)
{
if (bingo[i][j] != 0)// 하나라도 0이 아니면 false
{
bingo_check = false;
break;
}
}
if (bingo_check == true)
{
if (check[i] != true)
{
check[i] = true;
clear += 1;
}
}
}
//세로 빙고 처리
for (int i = 0; i < size; i++)
{
bool bingo_check = true;
for (int j = 0; j < size; j++)
{
if (bingo[j][i] != 0)// 하나라도 0이 아니면 false
{
bingo_check = false;
break;
}
}
if (bingo_check == true)
{
if (check[i+size] != true)
{
check[i+size] = true;
clear += 1;
}
}
}
//대각선 빙고 처리
{
bool bingo_check = true;
for (int i = 0; i < size; i++)
{
if (bingo[i][i] != 0)// 하나라도 0이 아니면 false
{
bingo_check = false;
break;
}
}
if (bingo_check == true)//true일때 값 체크
{
if (check[size * 2] != true)
{
check[size * 2] = true;
clear += 1;
}
}
}
{
bool bingo_check = true;
for (int i = 0; i < size; i++)
{
if (bingo[i][size - 1 - i] != 0)// 하나라도 0이 아니면 false
{
bingo_check = false;
break;
}
}
if (bingo_check == true)//true일때 값 체크
{
if (check[size * 2 + 1] != true)
{
check[size * 2 + 1] = true;
clear += 1;
}
}
}
}
}
8. N * N 달팽이 배열 알고리즘을 구현 하시오.
A. 이차원 배열의 크기를 결정할 N을 정수로 입력 받는다.
B. 출력예시)
배열의 크기를 입력하세요 : _5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
int N;
cout << "배열의 크기를 입력하세요 : ";
cin >> N;
int** test = new int* [N];//동적 배열을 이중으로 만듬 test[N][N]
for (int i = 0; i < N; i++)
{
test[i] = new int[N];
}
int count = 1;
int UP = 0; //올라가는 숫자
int DOWN = N - 1;// 내려가는 숫자
int D_COUNT = 0;
while (count <= N * N)// N * N값(배열 최대 값)이 출력되면 종료
{
for (int i = UP; i < N - D_COUNT; i++)// 위쪽
{
test[UP][i] = count;
count++;
}
for (int i = UP + 1; i < N - D_COUNT; i++)// 오른쪽
{
test[i][DOWN] = count;
count++;
}
for (int i = DOWN - 1; i > D_COUNT - 1; i--)// 아래쪽
{
test[DOWN][i] = count;
count++;
}
for (int i = DOWN - 2; i > D_COUNT - 1; i--)// 왼쪽
{
test[i + 1][UP] = count;
count++;
}
UP++;
DOWN--;
D_COUNT++;
}
//출력
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
cout << test[i][j] << "\t";
}
cout << endl << endl;
}
for (int i = 0; i < N; i++)//이중 동적 배열 삭제
{
delete [] test[i];
}
delete[] test;
}
'코딩 > 문제' 카테고리의 다른 글
백준 10828 스택 (0) | 2022.06.28 |
---|---|
코딩 시험 8번 class화 (0) | 2022.06.20 |
코딩 시험 7번 class화 (0) | 2022.06.16 |
코딩 시험 6번 class화 (0) | 2022.06.16 |
코딩 연습 [모의고사] (0) | 2022.06.08 |