출처 : 반크_세계유산 창덕궁
문제]
아래와 같이 출력하는 프로그램을 함수를 사용하여 작성하시오.
조건)
▶ 홀수차와 20을 넘지 않도록 입력하시오.
▶ 만약, 홀수차 또는 20을 넘어가면 에러메세지를 띄우고 다시 입력하도록 하시오.
▶ 계속 작업할지를 물어보도록 하시오.
▶ 계속 작업할 지를 물어보는 답변은 y 또는 n만 가능하며 그외는 에러메세지를 띄우고 다시 입력하시오.
▶ n, y는 대소문자 구분없이 작업할 수 있도록 하시오.
출력 예)
원하는 수를 입력하시오 : 8
입력수는 조건 20을 넘었거나 짝수를 입력하였습니다.
다시 입력하세요...
원하는 수를 입력하시오 : 25
입력수는 조건 20을 넘었거나 짝수를 입력하였습니다.
다시 입력하세요...
원하는 수를 입력하시오 : 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 |
계속하시겠습니까(Y/N)? u
Y/y/N/n이 아닙니다.
다시 입력하세요.
계속하시겠습니까(Y/N)? y
원하는 수를 입력하시오 : 3
1 | 2 | 3 |
8 | 9 | 4 |
7 | 6 | 5 |
계속하시겠습니까(Y/N)? n
수고하셨습니다.
참고풀이]
#include <iostream>
#include <vector>
#include <iomanip> //setw()
#include <string> //toupper()
using namespace std;
int Jari(int j)
{
int x,y;
x=0; y=1;
while(y<j)
{
y*=10;
x++;
}
return x;
}
void DarPeying(int n)
{
vector<vector<int> > v(n,vector<int>(n,0)); //2차원 벡터를 선언하고 입력수 n*n만큼 0으로 초기화한다.
int r,c; //행,열변수
int cnt;//증가값 변수
int sw;//행열의 방향을 결정하는 변수
int i;//반복변수
int nn;//입력수 만큼 작업을 진행할 n의 대체 변수
c=-1;r=0;sw=1;cnt=0;nn=n;
while(true)
{
//열변환 부분
for(i=1;i<=nn;i++)
{
c+=sw;
v[r][c]=++cnt;
}
//횟수 결정부분
nn--;
if(nn<1) break;
//행변환 부분
for(i=1;i<=nn;i++)
{
r+=sw;
v[r][c]=++cnt;
}
//행열의 방향을 결정한다.
sw*=-1;
}
//결과 출력
for(r=0;r<n;r++)
{
for(c=0;c<n;c++)
cout << setw(Jari(n*n*10)) << v[r][c];
cout << endl;
}
//vector의 size를 0으로 한다.
vector<vector<int> > ().swap(v);
}
int main()
{
int N;//임의의 정수입력 변수
char ch;//계속여부 체크 변수
while(true)
{
//홀수차와 20을 넘지 않도록 한다.
while(true)
{
cout << "원하는 수를 입력하시오 : ";
cin >> N;
if(N<20 && N%2==1) break;
cout << "입력수는 조건 20을 넘었거나 짝수를 입력하였습니다.\n";
cout << "다시 입력하세요...\n";
}
//달팽이를 출력한다.
DarPeying(N);
//계속 작업여부를 체크한다.
cout << endl;
while(true)
{
cout << "계속하시겠습니까(Y/N)? ";
cin >> ch;
if(toupper(ch)=='Y' || toupper(ch)=='N') break;
cout << "Y/y/N/n이 아닙닙다.\n";
cout << "다시 입력하세요.\n";
}
if(toupper(ch)=='N') break;
cout << endl;
}
cout << "수고하셨습니다.\n";
return 0;
}
참고풀이 결과]
대한민국의 아름다운 영토, 독도의 가을
'프로그램 > C++ 1000제' 카테고리의 다른 글
C++ 71제] vector사용, 영문 문자열을 문장 단위로 출력하기. (0) | 2022.08.23 |
---|---|
C++ 70제] vector 사용, 주어진 숫자를 분해하여 원소 찾는 프로그램. (0) | 2022.08.09 |
C++ 68제] vector 사용, 1~5까지 사칙연산 사용하여 10만들기. (0) | 2022.07.29 |
C++ 67제] vector 사용, 문제와 같은 달팽이형 사각형을 출력하시오. (0) | 2022.07.26 |
C++ 66제] vector 사용, 문제와 같은 리본을 출력하시오. (0) | 2022.07.25 |
댓글