설명 ¶
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; }