蓝桥杯 历届试题 打印十字图(模拟水题,图形输出)

历届试题 打印十字图  

时间限制: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值