
정사각형의 한 변의 길이 n을 입력받은 후 다음과 같은 문자로 된 정사각형 형태로 출력하는 프로그램을 작성하시오.
< 처리조건 >
문자의 진행 순서는 맨 오른쪽 아래에서 위쪽으로 'A'부터 차례대로 채워나가는 방법으로 아래 표와 같이 왼쪽 위까지 채워 넣는다. 'Z' 다음에는 다시 'A'부터 반복된다.

정사각형 한 변의 길이 n(n의 범위는 1이상 100 이하의 정수)을 입력받는다.
위의 형식과 같이 한변의 길이가 n인 문자 사각형을 출력한다. 문자 사이는 공백으로 구분하여 출력한다.
[Copy]
4 |
[Copy]
P L H D
O K G C
N J F B
M I E A |
이 문제 같은 경우에도 배열을 사용하고 다만 이번에는 문자로 처리하면 쉽게 해결이 가능합니다.
그런데 저는 이걸 굳이 배열 안쓰고 바로 출력한다고 하다가 고생했던 기억이 있군요.
그리고 당시에는 가독성을 생각하지 않아서 코드를 보기가 상당히 어렵네요.
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 |
#include <iostream>
using namespace std;
int main(void) {
int n; // 정사각형의 한면의 길이
int c; // 출력할 문자
cin >> n;
c = 'A' + n*n % 26 - 1;
for (int i = 0; i < n; i++) {
if (c - i < 'A') {
c = 'Z' + i;
}
char temp = char(c - i);
for (int j = 0; j < n; j++) {
cout << temp << " ";
temp -= n % 26;
if (temp < 'A') {
temp += 26;
}
}
cout << endl;
}
}
|
cs |
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
31
32
33 |
#include <iostream>
using namespace std;
int main(void) {
int n; // 정사각형 한 변의 길이
char c = 'A'; // 출력할 문자
char arr[100][100]; // 출력 결과를 저장할 배열
cin >> n;
for (int i = n-1; i >= 0; --i)
{
for (int j = n-1; j >= 0; --j)
{
// 우측 하단부터 좌 상단방향으로 채워나간다.
arr[j][i] = c++;
// 알파벳 범위를 넘으면 다시 A로 돌린다.
if (c > 'Z')
c = 'A';
}
}
// 결과 출력
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
cout << arr[i][j] << ' ';
}
cout << endl;
}
}
|
cs |
JUNGOL) 문제은행) 실력키우기) 문자사각형1