UVa 11040 (水题) Add bricks in the wall
题意:
45块石头如图排列,每块石头上的数等于下面支撑它的两数之和,求其余未表示的数。
分析:
首先来计算最下面一行的数,A71 = A81 + A82 = A91 + 2A92 + A93,变形得到A92 = (A71 - A91 - A93) / 2.
以此类推,就能得到最下面一整行的数。有了这个“地基”以后,所有的数就都能算出来了。
1 #include <cstdio> 2 3 int a[10][10]; 4 5 int main() 6 { 7 //freopen("in.txt", "r", stdin); 8 int T; 9 scanf("%d", &T); 10 while(T--) 11 { 12 for(int i = 1; i <= 9; i += 2) 13 for(int j = 1; j <= i; j += 2) 14 scanf("%d", &a[i][j]); 15 for(int i = 2; i <= 8; i += 2) 16 a[9][i] = (a[7][i-1]-a[9][i-1]-a[9][i+1])/2; 17 for(int i = 8; i >= 1; --i) 18 { 19 if((i & 1) == 0) 20 { 21 for(int j = 1; j <= i; ++j) 22 a[i][j] = a[i+1][j] + a[i+1][j+1]; 23 } 24 else 25 { 26 for(int j = 2; j <= i; j += 2) 27 a[i][j] = a[i+1][j] + a[i+1][j+1]; 28 } 29 } 30 31 for(int i = 1; i <= 9; ++i) 32 { 33 for(int j = 1; j < i; ++j) 34 printf("%d ", a[i][j]); 35 printf("%d\n", a[i][i]); 36 } 37 38 } 39 40 return 0; 41 }