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;
}