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

历届试题 打印十字图  

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

你可能感兴趣的:(蓝桥杯)