U E D R , A S I H C RSS

파스칼삼각형/구자겸

~cpp 
#include <stdio.h>
#define MAX 10
void main()
{
	int colum, row;			// 행과 열
	int i,j;				// 카운터
	int array[MAX][MAX];		// 배열

	scanf("%d %d",&colum,&row);

	for ( i=1;i<=colum;i++ ) {
		for ( j=1;j<=i;j++) {
			if ( j==1 || j==i ) {
				array[i-1][j-1] = 1;
				printf("%d ", array[i-1][j-1]);
			}
			else {
				array[i-1][j-1] = array[i-2][j-2]+array[i-2][j-1];
				printf("%d ", array[i-1][j-1]);
			}
		}
		puts("");
	}

	printf("%d\n", array[colum-1][row-1]);
}
~cpp 
def getrow(index):
	r = 1
	i = 0
	while (i<index):
		for j in range(r):
			i+=1
		if i>index: break
		r+=1
	return r

def getcol(index):
	first = 0
	for i in range(getrow(index)):
		first += i
	return index - first + 1

def getindex(row, col):
	first = 0
	for i in range(row):
		first += i
	return first + col - 1

def pascal(maxrow):
	arr = [ 0 for x in range(maxrow) for y in range(x+1) ]
	for i in range(len(arr)):
		if ( getcol(i)==1 ): arr[i] = 1
		elif ( getcol(i)==getrow(i) ): arr[i] = 1
		else:
			a = arr[getindex(getrow(i)-1,getcol(i)-1)]
			b = arr[getindex(getrow(i)-1,getcol(i))]
			arr[i] = a+b
	stair = 1
	print ' '*(maxrow-stair),
	for i in range(len(arr)):
		print arr[i],
		if ( getcol(i)==getrow(i) ):
			stair+=1; print ''; print ' '*(maxrow-stair),

import sys
pascal(int(sys.argv[1:][0]))
최소 배열로 만든 삼각형입니다. 어떤분이 전화로 질문 하셔서 모르겠다고 했는데, 완성해버렸습니다. 필요한 배열공간은 시그마n 이 되는군요. 비쥬얼 스튜디오가 없어서 파이썬으로 만들어봤습니다.(코드가 상당히 지저분하네요-_-) 파이썬을 깔고 pascal.py로 저장한 다음에 명령콘솔창에서 "pascal.py 10"이런식으로 사용.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.0059 sec