원래 제목 링크 : HTTP : //www.dotcpp.com/oj/problem1097.html
제목 설명
뱀 행렬은 순차적 시작 부분에 배치 자연수 (1)의 삼각 행렬이다.
기입
데이터 세트의 표제 복수 의해 정수 N으로 구성된 각 데이터. (N은 100보다 크지 않다)
수출
각 데이터 세트 및 사문석의 N 행의 행렬을 출력한다. 출력의 두 세트 사이에 여분의 빈 라인을 수행하십시오. 동일한 라인에서 디지털 매트릭스 삼각형 공간으로 분리된다. 라인의 끝 여분의 공백을한다.
샘플 입력
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)
의 첫 번째 숫자로는 네 번째 행의 11
행마다 제 번호를 관찰함으로써 제 행 I + 2 + 수가 긴 축적 이어진다 플러스 = Q는 단지 시작 후 결정 Q는 i 번째 행과 Q = +2 일 필요 합산하여 증가
그럼 그 라인의 시작 번호 결정 하였다
. 1 - 0
. 1 - 2
2 -. (4)
(3) -.. (7)
. (4) -11
그것은 쉽게 볼이다 (이전 라인의 시작점) 2 = 1 (이전 라인의 시작 값) + 1 (선 전류 번호) (스타트 라인 번호 0 (1)의 세트이다) (4 2 + 2 = 라인 시작 값에서 현재의 라인 수) 7 = 4 (라인 시작 값에) + 3 (현재 행 번호) (11) = 7 () 행 +4 (현재 수)
우리의 어레이를 처리하는지 이렇게
기록 식 : 전류 초기 값은 라인 + 현재의 라인 수와 같은
식에 [I] = A [ I-1] + I
다른 점은 그
첫번째 행의 시작에서, 각각의 행 라인 소자의 수 미만을
참조 코드
#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;
}