天天看點

藍橋杯基礎練習6——楊輝三角形試題 楊輝三角形資源限制問題描述輸入格式輸出格式樣例輸入樣例輸出資料規模與約定解題思路代碼如下疑惑總結

文章目錄

  • 試題 楊輝三角形
  • 資源限制
  • 問題描述
  • 輸入格式
  • 輸出格式
  • 樣例輸入
  • 樣例輸出
  • 資料規模與約定
  • 解題思路
  • 代碼如下
  • 疑惑
  • 總結

試題 楊輝三角形

藍橋杯練習系統-基礎練習BASIC-6

資源限制

時間限制:1.0s 記憶體限制:256.0MB

問題描述

楊輝三角形又稱Pascal三角形,它的第i+1行是(a+b)i的展開式的系數。

它的一個重要性質是:三角形中的每個數字等于它兩肩上的數字相加。

下面給出了楊輝三角形的前4行:

1

1 1

1 2 1

1 3 3 1

給出n,輸出它的前n行。

輸入格式

輸入包含一個數n。

輸出格式

輸出楊輝三角形的前n行。每一行從這一行的第一個數開始依次輸出,中間使用一個空格分隔。請不要在前面輸出多餘的空格。

樣例輸入

4

樣例輸出

1

1 1

1 2 1

1 3 3 1

資料規模與約定

1 <= n <= 34。

解題思路

将每一行第一個數字 1 的前一個數字置為 0,再将每一行的最後一個數字 1 的後一個數字也置為 0 。每一個數字,都等于它上一行同一列的數字以及上一行前一列的數字相加。

關鍵字:基礎練習 , 二維數組

代碼如下

#include<iostream>                  //運作結果是正确的
using namespace std;
int main(){
	int n;
	cin>>n;
	int a[n][n];
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<i+1;j++)
		{
			a[i-1][-1]=0;
			a[i][i+1]=0;
			a[i][j]=a[i-1][j-1]+a[i-1][j];
			a[0][0]=1;
			cout<<a[i][j]<<' ';
		}
		cout<<endl;
	}
	return 0;
}
           

疑惑

上面的代碼是修改後的,我對我修改前的代碼還有疑惑

為什麼 a[ i-1][ -1]=0 可以放到判斷語句else裡面,

a[ i ][ i+1]=0 卻不能?

修改前的代碼如下(它的運作結果也是正确的):

#include<iostream>              //運作結果是正确的
using namespace std;
int main(){
	int n;
	cin>>n;
	int a[n+1][n+1];
	a[0][0]=1;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<i+1;j++)
		{
			a[i-1][-1]=0;//-------------這一行可以。
			a[i][i+1]=0;  //就是這一行。
			if(i==0&&j==0)
				cout<<a[0][0];
			else
			{
				a[i][j]=a[i-1][j-1]+a[i-1][j];
				cout<<a[i][j]<<' ';
			}
		}
		cout<<endl;
	}
	return 0;
}
           

将a[ i ][ i+1]=0 放在else語句裡後(運作結果錯誤):

#include<iostream>                   //運作結果是錯誤的
using namespace std;
int main(){
	int n;
	cin>>n;
	int a[n+1][n+1];
	a[0][0]=1;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<i+1;j++)
		{
			a[i-1][-1]=0;
			if(i==0&&j==0)
				cout<<a[0][0];
			else
			{
				a[i][i+1]=0;///放在這裡運作結果就錯誤。
				a[i][j]=a[i-1][j-1]+a[i-1][j];
				cout<<a[i][j]<<' ';
			}
		}
		cout<<endl;
	}
	return 0;
}
           

總結

若有誤,感謝指出。

繼續閱讀