蓝桥杯 历届试题 打印十字图(模拟水题,图形输出)
历届试题 打印十字图
时间限制:1.0s 内存限制:256.0MB
问题描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
1
样例输出1
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
样例输入2
3
样例输出2
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。
水题,图形输出。
代码很长,没有做优化,找到关系了就简单粗暴的输出,思路很简单,做了注释,不难看懂。
有时间会做一次优化。
牛人链接,代码很精练,看第八题:2013蓝桥杯初赛c语言专科组--题目与答案
1 #include <iostream>
2 using namespace std;
3 char ex[82] = "..$$$$$....$...$..$$$.$.$$$$...$...$$.$$$$$.$$...$...$$$$.$.$$$..$...$....$$$$$..";
4
5 int main()
6 {
7 int n;
8 while(cin>>n){
9 if(n==1){ //如果只有一层,则直接输出
10 for(int i=0;i<=80;i++){
11 if(i==0)
12 cout<<ex[i];
13 else if(i%9)
14 cout<<ex[i];
15 else
16 cout<<endl<<ex[i];
17 }
18 cout<<endl;
19 }
20 else{
21 ex[0]='$';
22 ex[8]='$';
23 ex[72]='$';
24 ex[80]='$';
25 //输出第一部分,即最上面两层
26 //第一层
27 for(int i=1;i<=2;i++)
28 cout<<'.';
29 for(int i=1;i<=n*4+1;i++)
30 cout<<'$';
31 for(int i=1;i<=2;i++)
32 cout<<'.';
33 cout<<endl;
34 //第二层
35 for(int i=1;i<=2;i++)
36 cout<<'.';
37 cout<<'$';
38 for(int i=1;i<=n*4-1;i++)
39 cout<<'.';
40 cout<<'$';
41 for(int i=1;i<=2;i++)
42 cout<<'.';
43 cout<<endl;
44 //输出第二部分,输出 (n-2)*2 层
45 for(int i=3;i<=(n-2)*2+2;i++){
46 if(i%2){ //奇数层
47 for(int j=1;j<=(i-3)/2;j++)
48 cout<<"$.";
49 cout<<"$$$.";
50 for(int j=1;j<=(n-(i-3)/2-1)*4+1;j++)
51 cout<<'$';
52 cout<<".$$$";
53 for(int j=1;j<=(i-3)/2;j++)
54 cout<<".$";
55 }
56 else{ //偶数层
57 for(int j=1;j<=(i-1)/2;j++)
58 cout<<"$.";
59 cout<<"..$";
60 for(int j=1;j<=(n-(i-3)/2-1)*4-1;j++)
61 cout<<'.';
62 cout<<"$..";
63 for(int j=1;j<=(i-1)/2;j++)
64 cout<<".$";
65 }
66 cout<<endl;
67 }
68 //输出第三部分,一共九行
69 for(int i=0;i<9;i++){
70 if(i==0 || i==8){
71 for(int j=1;j<=n-2;j++)
72 cout<<"$.";
73 cout<<"$$";
74 }
75 else {
76 for(int j=1;j<=n-1;j++)
77 cout<<"$.";
78 }
79 for(int j=0;j<9;j++)
80 cout<<ex[i*9+j];
81 if(i==0 || i==8){
82 cout<<"$$";
83 for(int j=1;j<=n-2;j++)
84 cout<<".$";
85 }
86 else {
87 for(int j=1;j<=n-1;j++)
88 cout<<".$";
89 }
90 cout<<endl;
91 }
92 //输出第四部分。拷贝了第二部分,对for循环头部做了改动。
93 for(int i=(n-2)*2+2;i>=3;i--){
94 if(i%2){ //奇数层
95 for(int j=1;j<=(i-3)/2;j++)
96 cout<<"$.";
97 cout<<"$$$.";
98 for(int j=1;j<=(n-(i-3)/2-1)*4+1;j++)
99 cout<<'$';
100 cout<<".$$$";
101 for(int j=1;j<=(i-3)/2;j++)
102 cout<<".$";
103 }
104 else{ //偶数层
105 for(int j=1;j<=(i-1)/2;j++)
106 cout<<"$.";
107 cout<<"..$";
108 for(int j=1;j<=(n-(i-3)/2-1)*4-1;j++)
109 cout<<'.';
110 cout<<"$..";
111 for(int j=1;j<=(i-1)/2;j++)
112 cout<<".$";
113 }
114 cout<<endl;
115 }
116 //输出第五部分。拷贝的第一部分,将第一层和第二层颠倒过来输出。
117 //第二层
118 for(int i=1;i<=2;i++)
119 cout<<'.';
120 cout<<'$';
121 for(int i=1;i<=n*4-1;i++)
122 cout<<'.';
123 cout<<'$';
124 for(int i=1;i<=2;i++)
125 cout<<'.';
126 cout<<endl;
127 //第一层
128 for(int i=1;i<=2;i++)
129 cout<<'.';
130 for(int i=1;i<=n*4+1;i++)
131 cout<<'$';
132 for(int i=1;i<=2;i++)
133 cout<<'.';
134 cout<<endl;
135 //还原
136 ex[0]='.';
137 ex[8]='.';
138 ex[72]='.';
139 ex[80]='.';
140 }
141 }
142 return 0;
143 }
Freecode : www.cnblogs.com/yym2013