삼각형의 높이 N을 입력받아서 아래와 같이 문자 'A'부터 차례대로 맨 오른쪽 가운데 행부터 차례대로 아래와 같이 채워서 삼각형 모양을 출력하는 프로그램을 작성하시오.
< 처리조건 >
(1) 오른쪽 가운데 행에 문자 'A'를 채우고 왼쪽 열로 이동하여 위에서 아래로 채워나간다.
(2) 가장 왼쪽 행까지 반복하여 모두 채워 나간다. (문자 'Z'다음에는 'A'부터 다시 시작한다.)
삼각형의 높이 N(N의 범위는 1이상 100 이하의 홀수)을 입력받는다.
주어진 형태대로 높이가 N인 문자삼각형을 출력한다. 문자 사이는 한 개의 공백으로 구분한다.
입력범위를 벗어나면 "INPUT ERROR"를 출력한다.
[Copy]
5 |
[Copy]
E
F B
G C A
H D
I |
지금까지 만든 삼각형이 꽤 되니 어느정도 쉽게 만드실 수 있을거라 생각됩니다.
간단한 힌트를 드리자면 반복문 사용시 감소 연산자(--)를 사용하시면 됩니다.
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 |
#include <iostream>
using namespace std;
int main() {
// 삼각형 높이 변수
int height;
// 높이의 중간값을 저장하기 위한 변수
int mid;
// 결과 배열을 위한 포인터
char** arr;
// 문자 저장용 변수
char ch = 'A';
cin >> height;
// 삼각형의 높이는 1이상 100이하의 홀수
if (height < 1 || height > 100 || height % 2 == 0) {
cout << "INPUT ERROR" << endl;
return 0;
}
// 중간 값 저장
mid = height / 2;
// 2차원 배열 동적 할당
arr = new char*[height];
for (int i = 0; i <height; ++i)
arr[i] = new char[mid + 1];
for (int i = 0; i < height; ++i)
for (int j = 0; j <= mid; ++j)
arr[i][j] = ' ';
// 가운데에서 부터 좌측으로
for (int i = mid; i >= 0; --i) {
// 위에서 아래로
for (int j = i; j < height - i; j++) {
arr[j][i] = ch++;
if (ch > 'Z')
ch = 'A';
}
}
// 결과 배열 출력
for (int i = 0; i < height; ++i) {
for (int j = 0; j <= mid; ++j)
cout << arr[i][j] << ' ';
cout << endl;
}
// 동적할당 한 배열 메모리 해제
for (int i = 0; i < height; ++i)
delete[] arr[i];
delete[] arr;
}
|
cs |
JUNGOL) 문제은행) 실력키우기) 문자삼각형2