蓝桥杯 打印十字图
作者:互联网
转载自: https://www.cnblogs.com/cao-lei/p/6637202.html
题目标题:打印十字图
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg)
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
为了能准确比对空白的数量,程序要求对行中的空白以句点(.)代替。
输入格式:
一个正整数 n (n<30) 表示要求打印图形的层数
输出:
对应包围层数的该标志。
请仔细观察样例,尤其要注意句点的数量和输出位置。
题目解析: 当 n = 1 时,
![](https://www.icode9.com/i/i/?n=15&i=blog/1119097/201703/1119097-20170328222226904-668831773.png)
图1 当 n = 2 时,
![](https://www.icode9.com/i/i/?n=15&i=blog/1119097/201703/1119097-20170328222258420-896248612.png)
3.2、打印一圈图中背景颜色为绿色和紫色的图形,并将图中背景颜色为紫色的单元格变 " . "; 3.3、layer++,转 3.1 继续执行。
1 #include<iostream> 2 #include<string> 3 #include<queue> 4 #include<set> 5 #include<cmath> 6 #include<algorithm> 7 #include<stdio.h> 8 9 using namespace std; 10 11 char mp[200][200]; 12 13 //打印十字图 14 void print(int n) 15 { 16 int row = 9 + 4 * (n - 1); //计算出行数 17 18 for (int i = 0; i < row; i++) //先在所有单元格中存入 "." 19 { 20 for (int j = 0; j < row; j++) 21 { 22 mp[i][j] = '.'; 23 } 24 } 25 26 int center = row / 2; //找出中心 27 for (int i = center - 2; i <= center + 2; i++) //打印中心十字(图中背景颜色为蓝色) 28 { 29 mp[center][i] = '$'; 30 mp[i][center] = '$'; 31 } 32 33 34 for (int layer = 0; layer < n; layer++) //layer:控制打印的圈数 35 { 36 //打印四周图形(图中背景颜色为橙色),坐标范围为中心偏左两个单元格开始,中心偏右两个单元格结束,增加一圈即往外增加两个单元格 37 for (int x = (center - 2 - 2 * layer); x <= (center + 2 + 2 * layer); x++) 38 { 39 mp[center - 4 - 2 * layer][x] = '$'; 40 mp[x][center - 4 - 2 * layer] = '$'; 41 mp[center + 4 + 2 * layer][x] = '$'; 42 mp[x][center + 4 + 2 * layer] = '$'; 43 } 44 //打印图中背景颜色为绿色和紫色的图形,坐标范围为中心偏左三个单元格开始,中心偏右三个单元格结束,增加一圈即往外增加两个单元格 45 for (int y = center - 3 - 2 * layer; y <= center + 3 + 2 * layer; y++) 46 { 47 mp[center - 2 - 2 * layer][y] = '$'; 48 mp[y][center - 2 - 2 * layer] = '$'; 49 mp[center + 2 + 2 * layer][y] = '$'; 50 mp[y][center + 2 + 2 * layer] = '$'; 51 } 52 //将背景颜色为紫色的单元格变为"." 53 mp[center - 2 - 2 * layer][center - 1 - 2 * layer] = '.'; 54 mp[center - 1 - 2 * layer][center - 2 - 2 * layer] = '.'; 55 mp[center - 2 - 2 * layer][center + 1 + 2 * layer] = '.'; 56 mp[center - 1 - 2 * layer][center + 2 + 2 * layer] = '.'; 57 mp[center + 2 + 2 * layer][center - 1 - 2 * layer] = '.'; 58 mp[center + 1 + 2 * layer][center - 2 - 2 * layer] = '.'; 59 mp[center + 2 + 2 * layer][center + 1 + 2 * layer] = '.'; 60 mp[center + 1 + 2 * layer][center + 2 + 2 * layer] = '.'; 61 } 62 63 //输出图形 64 for (int i = 0; i < row; i++) 65 { 66 for (int j = 0; j < row; j++) 67 { 68 cout << mp[i][j]; 69 } 70 printf("\n"); 71 } 72 73 } 74 75 int main() 76 { 77 78 int n; 79 while (cin >> n) 80 print(n); 81 82 return 0; 83 }
标签:int,打印,蓝桥,mp,十字,图形,include,row 来源: https://www.cnblogs.com/FengZeng666/p/10541016.html