cpp로 저장하는 건 없는 모양...
내 코드의 요점은 매우 간단.
각 숫자의 배열을 이딴 식으로 만드는게 포인트.
01234567890
000010000 1
000101000 2
001020100 3
010303010 4
104060401 5
맨 윗줄 가운데와 맨 마지막줄 양 끝을 1로 초기화하고
나머지는 일반 파스칼의 삼각형 구하는 것처럼 다 산수로
위에 있는 두 숫자를 더해서 계산.
수학공식을 사용했다면 소스코드의 길이가 더 줄어들었을 것.
#include <iostream>
#include <stdio.h>
#include <new>
using namespace std; //new 가 어디 포함되는지 몰라서
//using namespace std 그냥 사용했음..
int main() {
int **arr, param = 0, col = 0;
cout << "How many lines?? : ";
cin >> param;//라인 수.
col = 2*param-1; //정렬했을 때 이쁘게 보이는 효과와,
//계산을 편하게 하기 위한 잔머리.
//그러나 불필요한 공간을 좀 많이 필요로 하는...
//필요한 만큼만 동적배열.
arr = new int* [param];
for(int i = 0;i<param;i++)
arr[i] = new int[col];
//0으로 모두 초기화.
//계산이 편해진다.
for(int i = 0;i<param;i++)
for(int j = 0;j<col;j++)
arr[i][j] = 0;
arr[0][param-1] = arr[param-1][0] = arr[param-1][col-1] = 1;
//여기가 계산하는 부분.
for(int i = 1;(param != 1) & (i<param);i++)
for(int j = 1;j<col-1;j++)
arr[i][j] = arr[i-1][j-1] + arr[i-1][j+1];
//보기 좋게 출력.
for(int i = 0;i<param;i++){
for(int j = 0;j<col;j++){
if(arr[i][j] == 0) {
cout << ' ';
continue;
}
cout << arr[i][j];
}
cout << endl;
}
//new로 잡아준 메모리를 다시 반환.
for(int i = 0;i<col;i++)
delete arr[i];
delete arr;
return 0;
}