U E D R , A S I H C RSS

파스칼삼각형/sksmsvlxk (rev. 1.1)

파스칼삼각형/sksmsvlxk

설명

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;
}

개선할 점

  • 일단 불필요한 공간을 쓰지 않고 할 수 있도록 해야 한다.
  • 내가 사용할 수 있는 함수가 존재하는 지 알아야 한다.
  • 이중 for loop 구조가 너무 많이 쓰였다.

느낀 점

autoit 하다가 cpp 하려니까 아 나... 빡세네...

autoit 조낸 쉽다... 편하기도 조낸 편하고...

담에 한번 세미나 해봐야쓰겠다.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:23
Processing time 0.0246 sec