題目描述
還記得中學時候學過的楊輝三角嗎?具體的定義這裏不再描述,你可以參考以下的圖形:
1
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;
}