zoukankan      html  css  js  c++  java
  • 叠筐(王道)

    Description

    需要的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。

    Input

    输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;

    Output

    输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
    样例输入:
    11 B A
    5 @ W
     
    样例输出:

      AAAAAAAAA
    ABBBBBBBBBA
    ABAAAAAAABA
    ABABBBBBABA
    ABABAAABABA
    ABABABABABA
    ABABAAABABA
    ABABBBBBABA
    ABAAAAAAABA
    ABBBBBBBBBA
      AAAAAAAAA

       @@@
    @WWW@
    @W@W@
    @WWW@
       @@@

    #include <iostream>
    #include<cstdio>
    using namespace std;
    
    int main()
    {
        int outPutBuf[82][82];
        int n;//叠筐大小
        bool first = true;//第一组数据标记
        char a,b;//输入的两个符号
        scanf("%d %c %c",&n,&a,&b);
        if(first == true)
            first = false;
        else
            cout << endl;
        for(int i=1,j=1;i<=n;i+=2,j++){
            //中心点
            int x=n/2+1,y=n/2+1;
            //每个圈左上角点的坐标
            x-=j-1,y-=j-1;
            //当前圈需要使用那个字符
            char c=j%2==1?a:b;
            //对当前圈进行赋值
            for(int k=1;k<=i;k++){
                outPutBuf[x+k-1][y]=c;//
                outPutBuf[x][y+k-1]=c;//
                outPutBuf[x+i-1][y+k-1]=c;//
                outPutBuf[x+k-1][y+i-1]=c;//
            }
        }
        //四个角上为空
        if(n!=1){
            outPutBuf[1][1]=' ';
            outPutBuf[n][1]=' ';
            outPutBuf[1][n]=' ';
            outPutBuf[n][n]=' ';
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                printf("%c",outPutBuf[i][j]);
            }
            cout << endl;
        }
        return 0;
    }

    总结:这个题目自己是照着王道强化了一遍,理解过程太长,就直接贴原文了

    这道题开始我是用cin输入char的,但这样会输出其ASCII码;后来用getchar和putchar,但这样就不能用空格作为间隔了,因为空格也是一个char;最后还是用的是scanf和printf

    下面是对三种方法的总结:(https://jingyan.baidu.com/article/ea24bc399577a3da62b33108.html)

    • 字符输入输出函数getchar/putchar

    1. getchar函数是接收从键盘输入的单个字符数据。它是一个无参函数,其语法格式为:

          getchar();

      【说明】

      1)通常把输入的字符赋予一个字符变量,构成赋值语句。例如:

        char  a;

        a=getchar();

      2) getchar函数只能接受单个字符,输入数字也按字符处理。

      3)输入多于一个字符时,只接收第一个字符。

      4) getchar函数等待用户输入,直到按回车键才结束,可用于暂停程序的运行,直到输入一个回车键。

      5)如果在程序中连续有两个以上getchar()函数,应该一次性输入所需字符,最后再按回车键,否则会把回车作为一个字符传给后面的getchar()函数。

    2. putchar函数是字符输出函数,功能是向标准输出设备(如显示器)输出单个字符数据。
      char c='B';
      putchar(c);//输出该字符
      putchar('x42');//用转义字符输出字母
      putchar(0x42);//用16进制ASCII码输出
      putchar(66);//用10进制ASCII码输出
    • cin/cout流读入/出数据

    1. 流读取运算符>>和cin结合在一起使用,可从键盘输入数据。

      格式1:

        功能:是从键盘读取一个数据并将其赋给“变量”。

        说明:在使用cin输入的时候必须考虑后面的变量类型。如果你要求输入一个整数,在 >>后面必须跟一个整型变量,如果要求一个字符,后面必须跟一个字符型变量。

        int age;

        cin >> age;

       也可以连续使用>>,实现从键盘对多个变量输入数据。

      格式2:

        这要求从键盘输入的数据的个数、类型与变量相一致。从键盘读取数据时,各数据之间要有分隔符,分隔符可以是一个或多个空格键、回车键等

      • 通过cout流输出数据:

        流插入运算符<<和cout结合在一起使用,可向显示器屏幕输出数据。

        格式1:

          功能:它把表达式的值输出到屏幕上,该表达式可以是各种基本类型的常量、变量或者由它们组成的表达式。输出时,程序根据表达式的类型和数值大小,采用不同的默认格式输出,大多数情况下可满足要求。

           若要输出多个数据,可以连续使用流插入运算符

        格式2:

           功能:将表达式的内容一项接一项的输出到屏幕上。

      • 1.输出字符串和输出变量的区别

          每当我们输出字符串常量的时候,必须用双引号把字符串引起来,以便将它和变量名明显的区分开来。

         例

          下面两个语句是不同的:

        cout << "Hello" ;                //打印字符串Hello到屏幕上cout << Hello ;                  //把变量Hello存储的内容打印到屏幕上

      • 2.如何增强信息的可读性

          为了增强输出信息的可读性,在输出多个数据时可以通过插入空格符,换行符或其他提示信息将数据进行组织,以获得更好的效果。

         例:

        x=12;

        cout << "tom is my friend,he is";

        cout << x;

        cout <<"years old";

        输出结果为tom is my friend,he is12year old

      • 3.换行符的使用

          必须注意,除非我们明确指定,cout并不会自动在其输出内容的末尾加换行符,因此下面的语句:

           例

          cout << "This is a sentence." ;

          cout << "This is another sentence." ;

           将会有如下内容输出到屏幕:

        This is a sentence.This is another sentence.

          虽然我们分别调用了两次cout,两个句子还是被输出在同一行。所以,为了在输出中换行,我们必须插入一个换行符来明确表达这一要求,在C++中换行符可以写作 。

                    另外,你也可以用操作符endl来换行,例如:

          cout << "First sentence." << endl;

          cout << "Second sentence." << endl;

          将会输出:

          First sentence.

          Second sentence. 

    • 格式化输入输出函数scanf/printf

    1. printf函数的功能是格式化输出任意数据列表,其一般调用格式为:

           printf(格式控制符,输出列表)

      【说明】

        1)格式控制由输入格式说明和普通字符组成,必须用双引号括起来。

         ●格式说明由%和格式字符组成,作用是将要输出的字符转换为指定的格式,如%d,%c等。

         ●普通字符是在输出时原样输出的字符,一般在显示时起提示作用。

          2)输出列表是需要输出的一组数据(可以为表达式和变量),各参数之间用“,”分开。要求格式说明和各输出项在数量和类型上要一一对应,否则将会出现意想不到的错误。

    2. 格式化输入函数scanf

        scanf函数的功能是格式化输入任意数据列表,其一般调用格式为:

           scanf(格式控制符,地址列表)

      【说明】

          1)地址列表中给出各变量的地址,可以为变量的地址,也可以为字符串的首地址。

               2)格式控制符由%和格式符组成,作用是将要输入的字符按指定的格式输入,如%d,%c等。

    • 几种输入输出格式的几点说明

      1. cin和cout在Dev C++中只能调用<iostream>库,而其他输入输出格式要调用<stdio.h>库或<cstdio>库

      2. 2

        cin和cout属于C++的概念,调用时涉及输入输出流,而scanf和printf属于C的概念,是C语言的标准输入/输出库中的函数,所以在时效上,scanf和printf优于cin、cout,对于大数据的输入输出,通常情况下应该用scanf、printf

      3. 3

        对于普通数据的输入输出,cin和cout比较方便,而在格式化方面,scanf和printf比较容易

      4. 4

        scanf和printf也缺点,cin和cout能够自动识别变量的数据类型,因此,在进行输入输出时,不需要指定数据类型,printf和scanf函数在输入输出时需指定数据类型

  • 相关阅读:
    个人编写的一个简单的DB类
    Access绝对地址
    sentry cli 上传source map
    自动旋转的饼图(echarts)
    点会转的折线图还带着柱子
    node 自动化工程部署
    SQL 模糊查询
    编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替。
    configure、make、make install 解释
    Linux学习笔记(实时更新)
  • 原文地址:https://www.cnblogs.com/xym4869/p/8510488.html
Copyright © 2011-2022 走看看