問題のブルーブリッジカップトレーニングソリューション - マトリックスを狩り(問題1097)

オリジナルタイトルリンクします。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;
}
公開された19元の記事 ウォンの賞賛3 ビュー3813

おすすめ

転載: blog.csdn.net/weixin_42792088/article/details/86741320