• ACM_输出格式


    输出格式

    Time Limit: 2000/1000ms (Java/Others)

    Problem Description:

    某水比参加了XX杯,但是他太水,所以三等都木有,所以他决定出一道水题水一水。

    Input:

    输入多组测试数据,每一组一个整数width(3-50),一个整数height(3-50),一个字符串(长度不超过width-2). 

    Output:

    对于每个测试实例,要求把字符串按要求输出(字符串处于由width为长,height为宽的矩形的中部),
    (。。。倘若不能完全对称,请以左边比右边少,上边比下边少为原则如样例),具体格式请参照sample output。

    Sample Input:

    20 6 abcd1234 
    20 6 abc
    

    Sample Output:

    +------------------+
    |                  |
    |     abcd1234     |
    |                  |
    |                  |
    +------------------+
    +------------------+
    |                  |
    |       abc        |
    |                  |
    |                  |
    +------------------+
    
     解题思路:水题!!!刚开始用了二维数组存放,代码比较简洁,但老是WA,原来是memset函数没有弄清楚,用0直接就填充字符二维数组,显然是不对的。。。本题所要填充的是字符空格' ',对应的ASCII码为32,因为memset函数将s所指向的某一块内存中的后n个字节的内容全部设置为ch指定的ASCII值,也可以直接用单个字符进行填充,明白这个后,以后做题思路就清晰了。
    二维数组AC代码:
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 char draw[55][55],s[50];
     4 int main(){
     5     int w,h,len,k,w0,h0;
     6     while(cin>>w>>h>>s){
     7         memset(draw,' ',sizeof(draw));
     8         draw[0][0]=draw[0][w-1]=draw[h-1][0]=draw[h-1][w-1]='+';
     9         for(int j=1;j<w-1;++j)
    10             draw[0][j]=draw[h-1][j]='-';
    11         for(int i=1;i<h-1;++i)
    12             draw[i][0]=draw[i][w-1]='|';
    13         len=strlen(s);k=0;h0=(h-1)/2;w0=(w-len)/2;
    14         for(int j=w0;k<len;++j)
    15             draw[h0][j]=s[k++];
    16         for(int i=0;i<h;++i){
    17             for(int j=0;j<w;++j)
    18                 printf("%c",draw[i][j]);
    19             printf("
    ");
    20         }
    21     }
    22     return 0;
    23 }

    AC代码: 

     1 #include<bits/stdc++.h>
     2 #define FOR(i,a,b) for (int i=a;i<=b;++i)
     3 #define PTF printf
     4 using namespace std;
     5 int main(){
     6     int w,h,len,objh,objw;char s[50];
     7     while(cin>>w>>h>>s){
     8         len=strlen(s);
     9         PTF("+");
    10         FOR(i,1,w-2)PTF("-");
    11         PTF("+
    ");
    12         h-=2;h--;/*h减1是去掉包含字符串的那一行,接下来再平分行数*/objh=h/2;
    13         FOR(i,1,objh){
    14             PTF("|");
    15             FOR(j,1,w-2)PTF(" ");
    16             PTF("|
    ");
    17         }
    18         objw=(w-2-len)/2;
    19         PTF("|");
    20         FOR(i,1,objw)PTF(" ");
    21         PTF("%s",s);//直接输出字符串
    22         FOR(i,1,w-2-len-objw)PTF(" ");
    23         PTF("|
    ");
    24         FOR(i,1,h-objh){
    25             PTF("|");
    26             FOR(j,1,w-2)PTF(" ");
    27             PTF("|
    ");
    28         }
    29         PTF("+");
    30         FOR(i,1,w-2)PTF("-");
    31         PTF("+
    ");
    32     }
    33     return 0;
    34 }
  • 相关阅读:
    进程与线程的区别与联系
    IPC 进程间通信
    sql中的group by 和 having 用法
    大端小端格式
    Spring AOP的一个比喻和IOC的作用
    volatile变量
    策略模式
    划分算法与快速排序
    希尔排序及希尔排序java代码
    红黑树
  • 原文地址:https://www.cnblogs.com/acgoto/p/8992371.html
Copyright © 2020-2023  润新知