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 }

代码君

时间: 2024-08-06 20:07:31

UVa 11040 (水题) Add bricks in the wall的相关文章

【UVA】11040 - Add bricks in the wall(找规律)

一道找规律的题,可以看出,大的三角形可以划分成好多个三层的三角形: [x] [a][x-a] [y] [    ][z] 这里面xyz都已知,所以可以求出a = (x + y - z ) /2 14043615 11040 Add bricks in the wall Accepted C++ 0.019 2014-08-15 06:02:50 #include<cstdio> #include<cstring> #include<iostream> #include&

UVa 1595 (水题) Symmetry

颓废的一个下午,一直在切水题,(ˉ▽ ̄-) 首先如果这些点是对称的话,那么它们的对称轴就是x = m,m是横坐标的平均值. 把这些点放到一个集合里,然后扫描每个点,计算出它关于x = m的对称点,看这个点是否在集合里面. 如果有一个不在的话,说明不能构成对称图形. 1 #include <cstdio> 2 #include <algorithm> 3 #include <set> 4 using namespace std; 5 6 struct Point 7 {

UVa 10391 (水题 STL) Compound Words

今天下午略感无聊啊,切点水题打发打发时间,=_=|| 把所有字符串插入到一个set中去,然后对于每个字符串S,枚举所有可能的拆分组合S = A + B,看看A和B是否都在set中,是的话说明S就是一个复合词. 1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <cstring> 5 #include <string> 6 #include <

UVa 11040 Add bricks in the wall (水题递推)

题意:给定一个金字塔,除了最后一行,每个数都等于支撑它的两个数的和,现在给奇数行的左数奇数位置,求整个金字塔. 析:很容易看出来,从下往上奇数行等于 a[i][j] = (a[i-2][j-1] - a[i][j-1] - a[i][j+1]) / 2;然后偶数行就推出来了. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string&

UVA 11040 Add bricks in the wall

https://vjudge.net/problem/UVA-11040 找规律 #include<cstdio> using namespace std; int a[10][10]; int main() { int T,d; scanf("%d",&T); while(T--) { for(int i=1;i<=5;i++) for(int j=1;j<=i;j++) scanf("%d",&a[i*2-1][j*2-1

UVa 400 (水题) Unix ls

题意: 有n个文件名,排序后按列优先左对齐输出.设最长的文件名的长度为M,则最后一列长度为M,其他列长度为M+2. 分析: 这道题很简单,但要把代码写的精炼,还是要好好考虑一下的.lrj的代码中有两个亮点,一个是print子函数,一个就是行数的计算.用心体会 1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 #include <algorithm> 5 using namespac

UVa 1593 (水题 STL) Alignment of Code

话说STL的I/O流用的还真不多,就着这道题熟练一下. 用了两个新函数: cout << std::setw(width[j]);    这个是设置输出宽度的,但是默认是在右侧补充空格 所以就要用cout.setf(ios::left);来设置一下左对齐. 1 #include <iostream> 2 #include <cstdio> 3 #include <sstream> 4 #include <vector> 5 #include &l

UVa 10935 (水题) Throwing cards away I

直接用STL里的queue模拟即可. 1 #include <cstdio> 2 #include <queue> 3 using namespace std; 4 5 const int maxn = 60; 6 int discarded[maxn], cnt; 7 8 int main() 9 { 10 int n; 11 while(scanf("%d", &n) == 1 && n) 12 { 13 cnt = 0; 14 qu

uva 1368 水题

枚举每一列的位置,求哪个字符出现的次数最多 #include<iostream> #include<string> #include<map> #include<cstdio> #include<vector> #include<algorithm> #include<assert.h> #include<cstring> using namespace std; #define _for(i, a, b) f