オリジナルタイトルリンクします。http://www.dotcpp.com/oj/problem1097.html
タイトル説明
蛇行行列を順次先頭に配置された自然数1の三角行列です。
エントリー
データセットのタイトル複数、いずれかによって整数Nからなる各データ。(Nは100以下です)
輸出
データの各セットおよび蛇行のN列の行列を出力します。出力の2つのセットの間の余分な空白行を行います。スペースで区切って同じ行にデジタルマトリックスの三角形。行の最後には、余分なスペースを行います。
サンプル入力
5
サンプル出力
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
問題解決のためのアイデア
0 - 15. 1. 3 6 10
12 14 9 5
2から13である4 8。
3 - 12 7
4 11
私たちは分析する、このような問題は、行と列に連結される
最初の行の0数が1である1 + 2(+ 2 0)、1 + 2 + 3 1 + 2 + 3 + 4 1 + 2 + 3 + 4 + 5
最初の番号の最初の2行である2 + 3(1 + 2 )2 + 3 + 4 2 + 3 + 4 + 5
秒行の最初の数値4は4 + 4 + 2(2)4 + 4 + 5
第三の行の最初の数は7である。7 + 5( 3 + 2)
最初の数は、第4行11は
、行ごとに第二の数を観察することにより、第一列I + 2 +数が長いの蓄積が続く=プラスQは、その後、出発決定しますQはi番目の行である必要があり、Q値を加算= +2がインクリメントされ
、次いで場合行の開始番号を決定した
0 - 1
1 - 2
2 - 4
3 - 7
4 -11。
それは見ることは容易である場合(前の行の開始点)2 = 1(前のラインの開始値)+ 1(ラインの現在の数)(開始行番号0が1の集合である)(4 2 + 2 =現在の行番号)ライン開始値に= 4 7()+ 3(現在の行番号)11 = 7(ライン開始値に)+4(行の現在数)
我々は、の配列を扱っているどのように
書かれた式:電流初期値は、ライン+の現在の行数に等しい
式:[I] = [ I-1] +私
もう一つのポイントであることを
最初の行の先頭から、各列ライン上の要素の数より少ないAを
参照コード
#include<iostream>
#include<cstdio>
#define Max 101
using namespace std;
int main()
{
int n,a[Max];
int p=1,q;
int k;
//循环录入每行的初始值
for(int i = 0;i < 101;++i)
{
if(i != 0)
{
a[i] = a[i-1]+i;
}
else
{
a[i] = 1;
}
}
while(cin>>n)
{
//k是列数
k = n;
for(int i=0;i <n;++i)
{
p = a[i];
q = i+2;
for(int j=0;j < k;++j)
{
if(j == 0)
{
cout << p <<" ";
}else
{
p=p+q;
q +=1;
//到达尾部就不要输出空格
if(j ==k-1)
{
cout << p ;
}else
{
cout << p <<" ";
}
}
}
--k; //列数相对上一行少1
cout<<endl;
}
}
return 0;
}