青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

/*
  Name: 楊輝三角算法集錦
  Copyright: 始發(fā)于goal00001111的專欄;允許自由轉(zhuǎn)載,但必須注明作者和出處
  Author: goal00001111
  Date: 27-11-08 19:04
  Description:
  分別使用了二維數(shù)組,一維數(shù)組,隊(duì)列,二項(xiàng)式公式,組合公式推論和遞歸方法等9種算法
  算法思路詳見代碼注釋——注釋很詳細(xì),呵呵
*/
#include<iostream>
#include<iomanip>

using namespace std;

const int MAXROW = 40;

void PrintBlank(int n);
int Com(int n, int m);
int Try(int row, int cel);
void Fun_1(int row);
void Fun_2(int row);
void Fun_3(int row);
void Fun_4(int row);
void Fun_5(int row);
void Fun_6(int row);
void Fun_7(int row);
void Fun_8(int row);
void Fun_9(int row);

int main()
{
    int row;
    cin >> row;
   
    Fun_1(row);
    cout << endl;
    Fun_2(row);
    cout << endl;
    Fun_3(row);
    cout << endl;
    Fun_4(row);
    cout << endl;
    Fun_5(row);
    cout << endl;
    Fun_6(row);
    cout << endl;
    Fun_7(row);
    cout << endl;
    Fun_8(row);
    cout << endl;
    Fun_9(row);

    system("pause");
    return 0;
}

//輸出n個空格
void PrintBlank(int n)
{
    for (int i=0; i<n; i++)
        cout << ' ';
}

//使用二維數(shù)組輸出楊輝三角
void Fun_1(int row)
{
    const int DIS = 6;
    int blank = 32;
    int a[MAXROW][MAXROW] = {0};
   
    for (int i=0; i<row; i++)
    {
        PrintBlank(blank-=DIS/2);//輸出第i行空格
        for (int j=0; j<=i; j++)
        {
            if (j == 0 || j == i)
                a[i][j] = 1;
            else //規(guī)律: 左上與正上元素之和
                a[i][j] = a[i-1][j-1] + a[i-1][j];
           
            cout << setw(DIS) << a[i][j];
            if (j == i)
                cout << endl;
        }
    }
}
//使用隊(duì)列輸出楊輝三角
void Fun_2(int row)
{
    const int DIS = 6;
    int max = row + 2;
    int blank = 30;
    int *a = new int[max];
    int front, rear;
   
    front = 0; a[0] = 1;
    rear  = 1; a[1] = 1;
    PrintBlank(blank);//輸出第一行空格

    while (front != (rear+1)%max)
    {
        if (a[front] == 1 && a[(front+1)%max] == 1)//到i-1行尾部
        {
            rear = (rear+1)%max; a[rear] = 1; //第i行尾部
            rear = (rear+1)%max; a[rear] = 1; //隊(duì)尾進(jìn)入第i+1行
            cout << setw(DIS) << 1 << endl;            //輸出第i-1行尾部
            front = (front+1)%max;            //對頭進(jìn)入第i行
            PrintBlank(blank-=DIS/2);//輸出第i行空格
        }
        //處理中間數(shù)據(jù)
        rear = (rear+1)%max; a[rear] = a[front] + a[(front+1)%max];
        if (front != rear)//隊(duì)列非空時輸出
            cout << setw(DIS) << a[front]; //輸出對頭
        front = (front+1)%max; //刪除對頭元素
    }
    delete []a;
}

//使用兩個一維數(shù)組代替二維數(shù)組輸出楊輝三角
void Fun_3(int row)
{
    const int DIS = 6;
    int blank = 33;
    int *a = new int[row]; //存儲下一行
    int *b = new int[row];//存儲輸出行
   
    b[0] = 1; 
    for (int n=1; n<=row; n++)
    {
        //輸出第n行
        PrintBlank(blank-=DIS/2);
        for (int i=0; i<n; i++)
            cout << setw(DIS) << b[i];
        cout << endl;
       
        if (n == row)//已經(jīng)到最后一行則不再復(fù)制
            continue;
        //生成第n+1行數(shù)據(jù)
        a[0] = b[0];
        for (int i=1; i<n; i++)
            a[i] = b[i] + b[i-1];
        a[n] = 1;
        //復(fù)制第n+1行數(shù)據(jù)
        for (int i=0; i<=n; i++)
            b[i] = a[i];
    }
    delete []a;
    delete []b;
}

//使用一個一維數(shù)組和兩個臨時變量代替二維數(shù)組輸出楊輝三角:很巧妙
void Fun_4(int row)
{
    const int DIS = 6;
    int blank = 30;
    int *a = new int[row]; //存儲輸出行
    int left, right;  
    //輸出第一行
    PrintBlank(blank);//輸出第1行空格
    cout << setw(DIS) << 1 << endl;
 
    a[0] = 1;//左側(cè)數(shù)據(jù)永遠(yuǎn)為1
    for (int n=1; n<row; n++)
    {
        left = a[0];
        //生成第n行數(shù)據(jù)
        for (int i=1; i<n; i++)//設(shè)置中間數(shù)據(jù)
        {
            right = a[i];
            a[i] = left + right;//left=a[i-1],right=a[i]
            left = right;
        }
        a[n] = 1;//設(shè)置右側(cè)的數(shù)據(jù)1
        //輸出第n行
        PrintBlank(blank-=DIS/2);
        for (int i=0; i<=n; i++)
            cout << setw(DIS) << a[i];
        cout << endl;
    }
    delete []a;
}


//使用一個一維數(shù)組和兩個臨時變量代替二維數(shù)組輸出楊輝三角:方法同F(xiàn)un_4,但更具有技巧,有點(diǎn)難懂
void Fun_5(int row)
{
    const int DIS = 6;
    int blank = 33;
    int *a = new int[row]; //存儲輸出行
    for (int i=1; i<row; i++)//賦初值0,這個很重要,因?yàn)楹竺嬗杏玫?
       a[i] = 0;
      
    a[0] = 1; 
    int left, right;
    for (int n=1; n<=row; n++)
    {
        left = 0;
        //生成第n行數(shù)據(jù)
        for (int i=0; i<n; i++)
        {
            right = a[i];
            a[i] = left + right;//left=a[i-1],right=a[i]
            left = right;
        }
        //輸出第n行
        PrintBlank(blank-=DIS/2);
        for (int i=0; i<n; i++)
            cout << setw(DIS) << a[i];
        cout << endl;
    }
    delete []a;
}

//使用一個一維數(shù)組輸出楊輝三角;兩側(cè)的1不變,計(jì)算中間的元素
void Fun_6(int row)
{
    const int DIS = 6;
    int blank = 30;
    int *a = new int[row];
   
     //輸出第一行
    PrintBlank(blank);//輸出第1行空格
    cout << setw(DIS) << 1 << endl;
   
    a[0] = 1;//最左側(cè)為1,永遠(yuǎn)不變
    for (int n=1; n<row; n++)
    {
        a[n] = 1; //設(shè)置最右側(cè)的1
        for (int i=n-1; i>0; i--)//設(shè)置中間的元素,由于a[i]的值變化,故應(yīng)從右到左計(jì)算
        {
            a[i] += a[i-1]; //楊輝三角的規(guī)律
        }
        //輸出第n+1行
        PrintBlank(blank-=DIS/2);
        for (int i=0; i<=n; i++)
            cout << setw(DIS) << a[i];
        cout << endl;
    }
    delete []a;
}

//使用二項(xiàng)式定理輸出楊輝三角
void Fun_7(int row)
{
    const int DIS = 6;
    int blank = 30;
   
    //輸出第一行
    PrintBlank(blank);//輸出第1行空格
    cout << setw(DIS) << 1 << endl;
   
    for (int i=1; i<row; i++)
    {
        PrintBlank(blank-=DIS/2);//輸出第i行空格
        for (int j=0; j<i; j++)
        {
            cout << setw(DIS) << Com(i, j);
        }
        cout << setw(DIS) << 1 << endl;//輸出每行最后一個1
    }
}

//輸出組合c(n,m)
int Com(int n, int m)
{
    int s1 = 1;
    int s2 = 1;
    m = (m > n/2) ? (n - m) : m;//取小的,以減少計(jì)算量

    for (int i=1; i<=m; i++)
    {
        s1 *= n;
        s2 *= i;
        if (s1 % s2 == 0)//防止溢出
        {
            s1 /= s2; 
            s2 = 1;
        }
        n--;
    }
    return s1;
}

//使用組合公式推論輸出楊輝三角 :C(n,m) = (n-m+1)/m * C(n,m-1)
void Fun_8(int row)
{
    const int DIS = 6;
    int blank = 30;
   
    //輸出第一行
    PrintBlank(blank);//輸出第1行空格
    cout << setw(DIS) << 1 << endl;
    for (int n=1; n<row; n++)
    {
        int c = 1;
        PrintBlank(blank-=DIS/2);//輸出第i行空格
        cout << setw(DIS) << c; //輸出每行第一個1
        for (int m=1; m<n; m++)//輸出中間元素
        {
            c = c * (n - m + 1) / m;
            cout << setw(DIS) << c;
        }
        cout << setw(DIS) << 1 << endl;//輸出每行最后一個1
    }
}

//使用遞歸方法輸出楊輝三角 :C(n,k) = 1 (k=0或者n=k);C(n,k) = C(n-1,k-1) + C(n-1,k)
void Fun_9(int row)
{
    const int DIS = 6;
    int blank = 33;

    for (int n=0; n<row; n++)
    {
        PrintBlank(blank-=DIS/2);//輸出第i行空格
        for (int m=0; m<=n; m++)//輸出中間元素
        {
            cout << setw(DIS) << Try(n, m);
        }
        cout << endl;//輸出每行最后一個1
    }
}

//遞歸函數(shù),輸出楊輝三角 :C(n,k) = 1 (k=0或者n=k);C(n,k) = C(n-1,k-1) + C(n-1,k)
int Try(int n, int k)
{
    if (k == 0 || k == n)//在左右兩側(cè)返回1
        return 1;
    return Try(n-1,k-1) + Try(n-1,k);//遞推公式 
}
Posted on 2008-11-27 19:12 夢想飛揚(yáng) 閱讀(3201) 評論(2)  編輯 收藏 引用

Feedback

# re: 楊輝三角算法集錦   回復(fù)  更多評論   

2008-11-28 11:48 by zuhd
看了你的Fun_1,F(xiàn)un_2,我就不想朝下看了

# re: 楊輝三角算法集錦   回復(fù)  更多評論   

2009-04-10 14:27 by zouzhi
很好啊,可以引發(fā)多種思路。我那個隊(duì)列還是不大懂啊

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            韩国在线一区| 国产综合久久久久久| 欧美日韩国产小视频| 国产日韩精品久久| 亚洲精品日本| 在线视频亚洲| 日韩香蕉视频| 久久综合久久综合久久| 亚洲国产精品国自产拍av秋霞| 亚洲精品一区二区三区婷婷月| 久久精品五月| 国产伦精品一区二区三区免费| 日韩午夜在线电影| 欧美国产精品劲爆| 久久精品免费观看| 国产午夜一区二区三区| 亚洲影视在线| 亚洲人成在线观看| 久久一区二区三区四区| 国产毛片一区二区| 亚洲一区区二区| 亚洲精品一二区| 欧美国产精品劲爆| 亚洲精品一区久久久久久| 久久久999| 午夜精品久久久| 国产欧美一区二区三区另类精品 | 欧美精品免费在线观看| 国产一区二区三区久久| 欧美一区二区免费视频| 亚洲深夜av| 久久综合九色九九| 久久精品欧洲| 亚洲人成高清| 欧美日韩亚洲一区二区三区在线| 久久综合免费视频影院| 久久成人资源| 亚洲视频一区二区在线观看| 美女日韩在线中文字幕| 久久人人爽爽爽人久久久| 久久久久国产精品一区| 在线看无码的免费网站| 亚洲欧洲免费视频| 国产乱理伦片在线观看夜一区| 亚洲美女少妇无套啪啪呻吟| 麻豆精品91| 欧美精品一区二区蜜臀亚洲| av不卡在线看| 亚洲视频在线观看网站| 国产精品一区二区三区免费观看| 亚洲精品网站在线播放gif| 久久久免费精品视频| 亚洲一区二区日本| 欧美精选午夜久久久乱码6080| 国语精品中文字幕| 欧美专区在线| 这里只有精品电影| 欧美日韩免费观看一区二区三区| 亚洲国产天堂久久综合| 美女爽到呻吟久久久久| 欧美日韩不卡| 亚洲视频一区二区在线观看| 一本色道久久综合亚洲精品按摩 | 久久久久国产精品麻豆ai换脸| 国内偷自视频区视频综合| 免费亚洲视频| 欧美视频一区二区三区…| 久久久久久久久综合| 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲香蕉伊综合在人在线视看| 国产一区二区欧美日韩| 亚洲国产成人精品女人久久久 | 欧美在线黄色| 一本色道久久综合亚洲精品不 | 99re在线精品| 国产精品影院在线观看| 亚洲国产一二三| 国产亚洲人成a一在线v站| 久色成人在线| 麻豆成人91精品二区三区| 午夜欧美精品| 欧美三级电影精品| 欧美xx69| 亚洲第一区色| 欧美在线观看视频一区二区三区 | 欧美激情bt| 国产欧美精品一区二区色综合| 亚洲全黄一级网站| 一区二区三区在线免费播放| 亚洲一区二区三区四区五区午夜| 亚洲激情在线视频| 久久精品国产第一区二区三区最新章节 | 亚洲欧美日韩在线播放| 欧美激情精品久久久久久变态| 欧美亚洲自偷自偷| 免费观看成人www动漫视频| 在线观看日韩av电影| 亚洲免费视频成人| 中文有码久久| 欧美日韩成人综合天天影院| 先锋a资源在线看亚洲| 欧美日韩亚洲高清一区二区| 欧美大片在线看| 亚洲大胆在线| 亚洲一区在线直播| 午夜精品剧场| 久久精品成人一区二区三区| 欧美一二区视频| 国产精品日韩一区| 亚洲中字黄色| 亚洲国产精品视频| 美女视频黄免费的久久| 欧美福利在线| 亚洲成人在线网| 免费欧美视频| 亚洲国产精品一区在线观看不卡| 亚洲国产成人在线| 快射av在线播放一区| 欧美成va人片在线观看| 亚洲国产精品成人精品| 欧美+亚洲+精品+三区| 亚洲国产日韩欧美在线图片| 亚洲精品人人| 国产精品大片| 午夜在线视频观看日韩17c| 久久免费视频观看| 91久久精品国产91性色tv| 蜜桃久久av| 99re这里只有精品6| 午夜伦理片一区| 亚洲理论在线| 欧美主播一区二区三区| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲视频在线看| 久久乐国产精品| 91久久久国产精品| 欧美日韩亚洲一区三区| 亚洲一区在线直播| 欧美不卡视频| 亚洲一区影音先锋| 国户精品久久久久久久久久久不卡 | 中文欧美在线视频| 久久国产精品99久久久久久老狼| 精品成人a区在线观看| 欧美va亚洲va日韩∨a综合色| 最新精品在线| 欧美一二三视频| 国产精品一区毛片| 亚洲一区亚洲| 欧美人与性禽动交情品| 国产精品人人做人人爽人人添| 亚洲人屁股眼子交8| 性感少妇一区| 在线亚洲精品| 国产综合色精品一区二区三区| 亚洲国产精品福利| 国产一区二区三区在线观看视频 | 国内精品视频一区| 久久精品国产亚洲a| 免费av成人在线| 久久久国产一区二区三区| 欧美一区二区三区在线| 午夜精品久久久久久久99黑人| 欧美高清视频一区| 久久一区二区三区四区五区| 国产精品久久久久久久久| av72成人在线| 激情亚洲一区二区三区四区| 最新亚洲电影| 国产精品福利在线| 久久国产精品久久精品国产| 久久精品一区二区三区四区| 好看的日韩av电影| 99国产精品久久久久老师| 欧美视频精品一区| 久久久人成影片一区二区三区 | 久久精品亚洲乱码伦伦中文| 亚洲欧美日韩成人| 亚洲国产99| 黄色另类av| 国产情人综合久久777777| 国产精品丝袜91| 欧美日韩亚洲系列| 欧美特黄一级大片| 欧美精品九九| 欧美日韩高清一区| 午夜久久美女| 在线亚洲免费| 欧美一区二区三区在线| 欧美黄色免费网站| 亚洲一区二区三区午夜| 亚洲欧洲日产国码二区| 亚洲精品四区| 狠狠入ady亚洲精品| 久久精品国产精品| 中日韩男男gay无套| 最近中文字幕mv在线一区二区三区四区 | 国产精品欧美风情| 欧美黄色成人网| 免费在线成人|