新思想

一维数组 输出 杨辉三角形

解法一:

// 一维数组 输出 杨辉三角形
void main()
{
    int i, j, t, n[N + 1] = { 0, 1 };
    printf("%5d\n", n[1]);

    for (i = 2; i <= N; i++)
    {
        n[i] = t = 1;
        printf("%5d", n[1]);
        for (j = 2; j < i; j++)
        {
            printf("%5d", n[j] += t);
            t = n[j] - t;
        }
        printf("%5d\n", n[i]);
    }
    getchar();
}

解法二:

#include <stdio.h>
#include <stdlib.h>

#define N 8

// 一维数组 输出 杨辉三角形
int main()
{
    printf("\tPascal 三角形\n\n");

    int i, j, n[N+1];
    printf("%5d\n", n[1] = 1);

    for (i = 2; i <= N; i++)
    {
        n[i] = 1;
        printf("%5d", n[i]);
        for (j = i-1; j > 1; j--)
            printf("%5d", n[j] += n[j-1]);
        printf("%5d\n", n[1]);
    }

    return 0;
}

 

C++ 源码:

#include <iostream>
#include <iomanip>      // std::setw
#include <vector>

// 一维数组 输出 杨辉三角形
int main()
{
    using std::cout;
    using std::endl;
    using std::setw;
    using std::vector;

    constexpr size_t Line = 16;
    constexpr unsigned W = 5;

    size_t i, j;
    int n[Line+1];

    cout << "\t\tPascal 三角形\n" << endl;

    cout << setw(W) << (n[1] = 1) << endl;
    for (i = 2; i != Line+1; ++i)
    {
        cout << setw(W) << (n[i] = 1);
        for (j = i-1; j != 1; --j)
            cout << setw(W) << (n[j] += n[j-1]);
        cout << setw(W) << n[1] << endl;
    }
    cout << endl << endl;

    using std::begin;
    using std::end;
    cout << setw(W) << (n[1] = 1) << endl;
    for (int *pl = begin(n)+2; pl != end(n); ++pl)
    {
        cout << setw(W) << (*pl = 1);
        for (int *pr = pl-1; pr != begin(n)+1; --pr)
            cout << setw(W) << (*pr += *(pr-1));
        cout << setw(W) << n[1] << endl;
    }
    cout << endl << endl;

    int nn[Line] = {0}, t;
    bool beg = true;
    for (auto ll : nn)
    {
        beg = true;
        for (auto &mm : nn)
            if (beg && mm == 1)
            {
                cout << setw(W) << (t = mm = 1);
                beg = false;
            }
            else if (mm == 0)
            {
                cout << setw(W) << (mm = 1) << endl;
                break;
            }
            else
            {
                cout << setw(W) << (mm += t);
                t = mm-t;
            }
    }
    cout << endl << endl;


    vector<unsigned> v(Line, 0);

    cout << setw(W) << (v[0] = 1) << endl;
    for (i = 1; i != Line; ++i)
    {
        cout << setw(W) << (v[i] = 1);
        for (j = i-1; j != 0; --j)
            cout << setw(W) << (v[j] += v[j-1]);
        cout << setw(W) << v[0] << endl;
    }
    cout << endl << endl;

    for (auto &ll : v)
    {
        ll = 0;
        beg = true;
        for (auto &mm : v)
            if (beg && mm == 1)
            {
                cout << setw(W) << (t = mm = 1);
                beg = false;
            }
            else if (mm == 0)
            {
                cout << setw(W) << (mm = 1) << endl;
                break;
            }
            else
            {
                cout << setw(W) << (mm += t);
                t = mm-t;
            }
    }
    cout << endl << endl;

    cout << setw(W) << (v[0] = 1) << endl;
    for (vector<unsigned>::iterator it = v.begin()+1; it != v.end(); ++it)
    {
        cout << setw(W) << (*it = 1);
        for (vector<unsigned>::reverse_iterator rit(it); rit != v.rend()-1; ++rit)
            cout << setw(W) << (*rit += *(rit+1));
        cout << setw(W) << *(v.cbegin()) << endl;
    }
    cout << endl << endl;

    return 0;
}

 

posted on 2015-11-06 15:27  新思想  阅读(662)  评论(1)    收藏  举报

导航