從最底層開始建起,當最底層的數字都是正確的時候,上面的一定可以符合。
一開始,最底層的 blank brick 先填 0,然後開始往上建。
當往上遇到 input 給定的 brick時 :
check 是否符合,如果不符合,則調整目前層數的下一層,使符合,並在這一層往上建完後
(調整完這層所要調整的),再從最底層開始建起,這樣的話,剛剛往下調整的層數,由下下層
做 check 時,可以繼續往下調整,
往上建的時候,注意 index:
input 給定的 brick 會和目前往上建的左 brick 的 column 相同,row - 1
往下被調整的 brick 會是目前往上建的左 brick 的 column + 1,row + 1
最後:
當需要調整時,要把 i 設為 10,因為 outer for loop 完成一次時,會做 -1 的動作。
#include <stdio.h>
#include <stdlib.h>
int main(void){
int amount,i,j,modify,k,m;
int triangle[10][10]={0};
scanf("%d",&amount);
while(amount--){
for(i=1;i<=9;i+=2){
for(j=1;j<=i;j+=2){
scanf("%d",&triangle[i][j]);
}
}
for(i=9;i>1;i--){
modify=0;
for(j=1;j<i;j++){
if( (i-1)%2!=0 && j%2!=0 ){
if(triangle[i][j]+triangle[i][j+1]!=triangle[i-1][j]){
triangle[i+1][j+1]+=(triangle[i-1][j]-(triangle[i][j]+triangle[i][j+1]))/2;
modify=1;
}
}else{
triangle[i-1][j]=triangle[i][j]+triangle[i][j+1];
}
}
if(modify==1) i=10;
}
for(i=1;i<=9;i++){
for(j=1;j<i;j++){
printf("%d ",triangle[i][j]);
triangle[i][j]=0;
}
printf("%d\n",triangle[i][j]);
triangle[i][j]=0;
}
}
return 0;
}
沒有留言:
張貼留言