문제

파스칼 삼각형이란 아래 <표1> 과 같은 

자신의 왼쪽 위의 좌표와 오른쪽 위의 좌표 값을 더해서 값을 계속 갱신시켜 나가는 형태의 삼각형을 말한다.

 

아래와 같은 파스칼 삼각형의 높이 n과 종류 m을 입력받은 후 다음과 같은 형태의 파스칼 삼각형을 출력하는 프로그램을 작성하시오.

 

 

 

<처리조건>
m에 대한 파스칼 삼각형의 모습은 아래 <표2>의 모습과 같다.

 



 

입력형식

삼각형의 높이n(1부터 30사이의 정수)과 종류m(1부터 3사이의 정수)을 입력받는다.

 

출력형식

위에서 제시한 형태의 파스칼 삼각형을 입력에서 들어온 높이 n과 종류 m에 맞춰서 출력한다. 숫자는 한칸의 공백으로 구분하여 출력한다.

 

<코드>

#include <stdio.h>

void first(int n, int arr[][100])
{
	for(int i=0; i<n; i++)
	{
		for(int j=0; j<=i; j++)
			printf("%d ", arr[i][j]);
		
		printf("\n");
	}
}

void second(int n, int arr[][100])
{
	for(int i=n-1; i>=0; i--)
	{
		for(int j=0; j<n-i-1; j++)
			printf(" ");
		
		for(int j=0; j<=i; j++)
			printf("%d ", arr[i][j]);
		
		printf("\n");
	}
}

void third(int n, int arr[][100])
{
	int x, y;
	for(int i=0; i<n; i++)
	{
		y = n-1;
		x = i;
		for(int j=0; j<=i; j++)
		{
			printf("%d ", arr[y][x]);
			x--;
			y--;
		}
		printf("\n");
	}
}

int main()
{
	int n, m;
	int arr[100][100] = {0, };
	
	scanf("%d %d", &n, &m);
	
	if(n<1||n>30||m<1||m>3)
	{
		printf("INPUT ERROR!");
		return 0;
	}
	
	for(int i=0; i<n; i++)
	{
		for(int j=0; j<=i; j++)
		{
			if(!j||j==i)
				arr[i][j] = 1;
			else
				arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
		}
	}
	
	switch(m)
	{
		case 1:
			first(n, arr);
			break;
		case 2:
			second(n, arr);
			break;
		case 3:
			third(n, arr);
			break;
	}
	
	return 0;
}

'코딩 > Beginner Coder' 카테고리의 다른 글

1331 : 문자마름모  (0) 2020.05.12
1707 : 달팽이사각형  (0) 2020.05.12
1337 : 달팽이삼각형  (0) 2020.05.07
1641 : 숫자삼각형  (0) 2020.05.07
1329 : 별삼각형3  (0) 2020.05.06

+ Recent posts