楊輝三角

題目描述

還記得中學時候學過的楊輝三角嗎?具體的定義這裏不再描述,你可以參考以下的圖形:

1 1 

1 2 1 

1 3 3 1 

1 4 6 4 1 

1 5 10 10 5 1

輸入

輸入數據包含多個測試實例,每個測試實例的輸入只包含一個正整數n(1<=n<=30),表示將要輸出的楊輝三角的層數。

輸出

對應於每一個輸入,請輸出相應層數的楊輝三角,每一層的整數之間用一個空格隔開,每一個楊輝三角後面加一個空行。

樣例輸入

2 
3

樣例輸出

1
1 1

1
1 1
1 2 1

題意簡潔明瞭,就是要我們輸出n層的楊輝三角,我們直接開個n*n大小的二維數組,然後寫個循環去算就是了。需要注意的地方有幾個,一是我們寫的時候直接用0將三角的空位補齊,在輸出的時候跳過0輸出就行,例如這樣,補成一個方陣:

1 0 0
1 1 0
1 2 1

第二個要注意的點就是寫代碼的時候我們先用0填充數組的所有位置,然後把全是 1 的第一列先寫個循環處理。之後核心的邏輯就是(i,j) = (i-1,j-1) + (i-1,j),其中i是行數,j是列數,我們先設0的目的就是爲了這裏寫起來方便簡潔,不用再處理越界的問題,但是需要注意計算楊輝三角的二層循環的行號和列數必須從1開始。

貼一下代碼,已在OJ上AC:

#include <cstdio>
#include <algorithm>
#include <string>
#include <iostream>

using namespace std;

int main(){

	int n;
	while(scanf("%d",&n) != EOF){
		int arr[n][n];
		//雙重循環一併把清零和初始化1的操作完成 
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				if(j==0){
					arr[i][j] = 1;
				}
				else{
					arr[i][j] = 0;
				}
				
			}
		}
		
		for(int i=1;i<n;i++){
			//此處j<i+1是爲了補上我們初始設置int j=1時跳過的一個位子 
			for(int j=1;j<i+1;j++){
				arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
			}
		}
		
		//輸出時跳過0 
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				if(arr[i][j] == 0){
					continue;
				}
				printf("%d ",arr[i][j]);
			}
			printf("\n");
		}
		printf("\n");
	}
	
	return 0;
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章