728x90
반응형

문제 : http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=2074&sca=2010

 

JUNGOL

 

www.jungol.co.kr

문제

삼각형의 높이 N을 입력받아서 아래와 같이 문자 'A'부터 차례대로 왼쪽 대각선으로 채워서 삼각형 모양을 출력하는 프로그램을 작성하시오.

 

< 처리조건 >
(1) 오른쪽 위부터 왼쪽 아래쪽으로 이동하면서 문자 'A'부터 차례대로 채워나간다.
(2) N번 행까지 채워지면 다시 오른쪽 둘째 행부터 왼쪽 아래로 채워나간다.
(3) 삼각형이 모두 채워질 때까지 반복하면서 채워 나간다. (문자 'Z'다음에는 'A'부터 다시 시작한다.)

 


 

 

입력형식

삼각형의 높이 N(N의 범위는 100 이하의 양의 정수)을 입력받는다.

 

출력형식

주어진 형태대로 높이가 N인 문자삼각형을 출력한다. 문자 사이는 한 개의 공백으로 구분한다.

 

입력 예

5

 

출력 예

        A
      B F
    C G J
  D H K M
E I L N O

 

Hint!

<생각하기>

배열에 채우는 순서를 먼저 생각해보자. 

(1, 5) (2, 4) (3, 3) (4, 2) (5, 1) (2, 5) (3, 4) (4, 3) (5, 2) (3, 5) (4, 4) (5, 3) (4, 5) (5, 4) (5, 5) 

i를 어떻게 정하는게 좋을지 여러 가지 방법이 있으므로 각자 생각해 보자. 

 

아래의 소스는 i를 시작하는 행의 위치로 정하고 작성한 것이다. 

배열은 널값(‘\0’, 0)으로 초기화 하고 출력할 때 널값인 경우 공백을 출력하면 된다. 

 

<코드> 

 

1

2

3

4

5

6

7

for (i = 1; i <= n; i++) {

    for (j = i, k = n; j <= n; j++, k--) {

        arr[j][k] = alpha++;

        if(alpha > 'Z')

            alpha = 'A';

    }

}

Colored by Color Scripter

cs

 

 

<코드분석> 

01 : i는 처음 시작하는 행의 위치를 나타낸다. 

02 ; j는 행의 위치로 i부터 n까지 증가한다. k는 열의 위치로 n부터 1씩 감소한다. for문에서 초기값과 증감에 여러개의 연산을 처리하려면 위와 같이 ','로 구분하여 작성하면 된다. 

04 : 알파벳이 'Z'보다 커지면 'A'로 바꾸어 준다.

 

 

코드 : 

# include <stdio.h>

int main()
{
	int n,i,j,k;
	char arr[101][101]={0,};
	char c = 'A';
	
	scanf("%d",&n);
	
	for(i = 1; i<=n; i++)
	{
		for(j = i, k =n; j<=n; j++,k--)
		{
			arr[j][k] = c++;
			if(c >=91)
				c = 'A';
		}
	}
	
	
	for(i = 1; i<=n; i++)
	{
		for(j = i; j<n; j++)
		{
			printf("  ");
		}
		for(j = 1; j<=n; j++)
		{
			if(arr[i][j]!= '\0')
			{
				printf("%c ",arr[i][j]);
			}
		}
		printf("\n");
	}

	return 0;
}
728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기