zoukankan      html  css  js  c++  java
  • 蓝桥杯 历届试题 打印十字图(模拟水题,图形输出)

    历届试题 打印十字图  

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

  • 相关阅读:
    c# Java 静态方法 并发问题
    最效率分页查询
    Hibernate中对象的三种状态
    Spring框架概述
    扫盲Cookies简单理解——关于IE浏览器隐私设置
    实例分析Struts的由来和概述
    操作系统——存储
    Hibernate概述
    操作系统——进程部分
    操作系统——进程死锁
  • 原文地址:https://www.cnblogs.com/yym2013/p/3515480.html
Copyright © 2011-2022 走看看