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 }
代码君

 

posted @ 2015-01-04 10:35  AOQNRMGYXLMV  阅读(476)  评论(0编辑  收藏  举报