[編程題]蛇形矩陣

Talk is cheap, show me the code.

一、問題描述

蛇形矩陣是由1開始的自然數依次排列成的一個矩陣上三角形。

樣例輸入
5

樣例輸出

1 3 6 10 15

2 5 9 14

4 8 13

7 12

11
接口說明
原型
void GetResult(int Num, char * pResult);

輸入參數:

int Num:輸入的正整數N

輸出參數:
int * pResult:指向存放蛇形矩陣的字符串指針

指針指向的內存區域保證有效
返回值:

void

輸入描述:

輸入正整數N(N不大於100)

輸出描述:

輸出一個N行的蛇形矩陣。

輸入例子:

4

輸出例子:

1 3 6 10
2 5 9
4 8
7

二、問題分析

主要是找規律,一行一行地輸出,首先找到每行第一個數的規律,第 i 行比上一行第一個數大 i-1,再找到一行中的數的規律,第 i 行中後一個數比前一個數從大 i+1 開始一直到大 n。

解題方式1:

首先找到計算每一行第一個數的計算公式,然後根據上述規律輸出每一行的每個數。

#include <iostream>
using namespace std;

int main()
{
    int n;
    while (cin >> n)
    {
        for (int i= 1; i <= n; i++)
        {
            int beg = i * (i - 1) / 2 + 1;
            cout << beg;
            for (int j = i + 1; j <= n; j++)
            {
                beg += j;
                cout << " " << beg;
            }
            cout << endl;
        }
    }

    return 0;
}

解題方式2:

完全按照上面的規律來,其實第一個數沒必要找出計算第一個數的公式,直接按規律做。

#include <iostream>
using namespace std;

int main()
{
    int n;
    while (cin>>n)
    {
        int beg=1;
        for(int i=1;i<=n;i++)
        {
            cout<<beg;
            int tmp = beg;
            for(int j=i+1;j<=n;j++)
            {
                tmp+=j;
                cout<<" "<<tmp;
            }
            cout<<endl;
            beg+=i;
        }
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章