第六届蓝桥杯C/C++A组第四题解答

来源:互联网 发布:js带有节假日的日历 编辑:程序博客网 时间:2024/05/17 07:19

题目:

代码填空

#include <stdio.h>#include <string.h>void StringInGrid(int width, int height, const char* s){    int i,k;    char buf[1000];    strcpy(buf, s);    if(strlen(s)>width-2) buf[width-2]=0;    printf("+");    for(i=0;i<width-2;i++) printf("-");    printf("+\n");    for(k=1; k<(height-1)/2;k++){        printf("|");        for(i=0;i<width-2;i++) printf(" ");        printf("|\n");    }    printf("|");    printf("%*s%s%*s",_____________________________________________);  //填空    printf("|\n");    for(k=(height-1)/2+1; k<height-1; k++){        printf("|");        for(i=0;i<width-2;i++) printf(" ");        printf("|\n");    }       printf("+");    for(i=0;i<width-2;i++) printf("-");    printf("+\n");  }int main(){    StringInGrid(20,6,"abcd1234");    return 0;}

对于题目中数据,应该输出:

+------------------+
|                        |
|     abcd1234   |
|                        |
|                        |

+-------------------+

思路:

根据*s的定义,填写相应代码即可。

【*s代表占位符,如printf(“%*s”, 6, “1234”);就相当于printf(“%6s”, “1234”);】

在没有填任何东西前,删除要填的那一整行,发现这一行的目的是要我们吧带有abcd1234的哪一行显示出来,数一数空格数量,找到相应的规律,注意所要求的不仅仅是abcd1234四个字母,还要求任意字符串,故要找到普片规律,得到(width-strlen(buf)-2)/2.


解答:

(width-strlen(buf)-2)/2, " ", buf,(width-strlen(buf)-2)/2," "

运行结果:

心路历程:

做这道题的时候,实在不知道*s为何物,且对一个C++选手而言,很少用到printf,所以几乎无法下手,最后半个小时的垃圾时间就一直在各种试,无果。其实说实在的,蓝桥杯搞这个*s是很不科学的,按往年的思路,这一题会非常简单,但今年就搞了个这么偏的东西,倒也挺出乎我的意料。




0 0
原创粉丝点击