카테고리 없음

이항계수 (파스칼의 삼각형)

zuyo 2017. 7. 20. 18:23
반응형
#include <stdio.h>

void main()
{
    int n, k;
    n = 20;
    k = 20;

    int ** B = new int *[n];
    for (int i = 0; i < n; i++)
    {
        B[i] = new int[k];
    }

    for (int i = 0; i < n; i++)
    {
        int min = 0;

        if (i < k) min = i + 1; //min=i일때 i가 0이면 0번반복이되게되는걸 막음.
        else min = k;

        for (int j = 0; j < min; j++)
        {
            if (j == 0 || j == i)
                B[i][j] = 1;
            else
                B[i][j] = B[i - 1][j - 1] + B[i - 1][j];
            printf("%d", B[i][j]);
        }
        printf("\n");
    }
}

#include <stdio.h>

void main()
{
    int k;
    k = 5;

    int * B = new int[k];
    int * C = new int[k];

    //배열의 모든 성분 0으로, 첫번째원소는 1로 초기화
    for (int j = 0; j < k; j++)
    {
        B[0] = 1;
        B[j] = 0;
    }

    for (int j = 0; j < k; j++)
    {
        if (j == 0)
            B[j] = 1; //첫번째원소는 1
        else
        {
            for (int t = 1; t < k; t++) //나머지원소는 이 규칙을 따르되
            {
                B[t] = B[t] + B[t - 1];   //2항부터 모든원소는 그 전의 자기자신과 자기전자리의 성분의 합이고
                                                //문제점: 배열이 하나라 아마 그 전단계를 기억할 방법이 필요함(행렬C를 만든다던지)

                if (t + 1 > (j + 1) / 2) //분기점을 기준으로 이항계수의 대칭성을 이용한다
                    B[t] = B[j - t];
            }
        }
    }
    for (int j = 0; j < k; j++)
        printf("%d \t", B[j]);

    printf("\n");
}


반응형