画表格--蓝桥杯

xiaoxiao2021-03-01  7

简述

这是2013年蓝桥杯全国软件大赛模拟题的第4题,问题是画表格。

题目描述

标题:画表格 在中文Windows环境下,控制台窗口中也可以用特殊符号拼出漂亮的表格来。 比如: ┌─┬─┐ │ │ │ ├─┼─┤ │ │ │ └─┴─┘ 其实,它是由如下的符号拼接的: 左上 = ┌ 169 176 上 = ┬ 169 208 右上 = ┐ 169 180 左 = ├ 169 192 中心 = ┼ 169 224 右 = ┤ 169 200 左下= └ 169 184 下 = ┴ 169 216 右下 = ┘ 169 188 垂直 = │ 169 166 水平 = ─169 164 本题目要求编写一个程序,根据用户输入的行、列数画出相应的表格来。 例如用户输入: 3 2 则程序输出: ┌─┬─┐ │ │ │ ├─┼─┤ │ │ │ ├─┼─┤ │ │ │ └─┴─┘ 用户输入: 2 3 则程序输出: ┌─┬─┬─┐ │ │ │ │ ├─┼─┼─┤ │ │ │ │ └─┴─┴─┘ 对于编程题目,要求选手给出的解答完全符合ANSI C++标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。 代码中允许使用STL类库,但不能使用MFC或ATL等非ANSI c++标准的类库。例如,不能使用CString类型(属于MFC类库)。 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。 注意选择自己使用的编译环境。

分析

这是2013年蓝桥杯全国软件大赛模拟题的第三题。首先通过如下小程序获得每个符号对应的char值:

# include <stdio.h> int main(void) { int text[100]; int c; int i; i = 0; while((c = getchar()) != EOF) { text[i++] = c; } text[i] = EOF; i = -1; while(text[i++] != EOF) { printf("M", text[i]); if(text[i] == 10) { putchar('\n'); } } }

cmd运行界面:

字符对应关系如下:

0 左上 = ┌ 169 176 1 上 = ┬ 169 208 2 右上 = ┐ 169 180 3 左 = ├ 169 192 4 中心 = ┼ 169 224 5 右 = ┤ 169 200 6 左下 = └ 169 184 7 下 = ┴ 169 216 8 右下 = ┘ 169 188 9 垂直 = │ 169 166 10 水平 = ─ 169 164

两个char表示一个特殊字符。然后通过数学计算,画出图形。代码虽然看上去比较松散,但是没有涉及复杂算法。

源代码

# include <stdio.h> int main(void) { int m, n; int i, j; scanf("%d%d", &m, &n); for(i = 1; i <= 2 * m + 1; i++) { putchar(9); if(i == 1) { //zuoshang putchar(169); putchar(176); //shuiping putchar(169); putchar(164); for(j = 3; j < 2 * n + 1; j += 2) { //zhongshang putchar(169); putchar(208); //shuiping putchar(169); putchar(164); } //youshang putchar(169); putchar(180); } else if(i == 2 * m + 1) { //zuoxia putchar(169); putchar(184); //shuiping putchar(169); putchar(164); for(j = 3; j < 2 * n + 1; j += 2) { //zhongxia putchar(169); putchar(216); //shuiping putchar(169); putchar(164); } //youxia putchar(169); putchar(188); } else if(i % 2 == 0) { //chuizhi putchar(169); putchar(166); //kong putchar(32); putchar(32); for(j = 3; j < 2 * n + 1; j += 2) { //chuizhi putchar(169); putchar(166); //kong putchar(32); putchar(32); } //chuizhi putchar(169); putchar(166); } else if(i % 2 == 1) { //zhongzuo putchar(169); putchar(192); //shuiping putchar(169); putchar(164); for(j = 3; j < 2 * n + 1; j += 2) { //zhongxin putchar(169); putchar(224); //shuiping putchar(169); putchar(164); } //you putchar(169); putchar(200); } putchar(10); } }

更新

20130501

在做这个题的时候,考虑的有点复杂,其实不用获得特殊字符对应的char,而是直接引用。

# include <stdio.h> int main(void) { int m, n; int i, j; scanf("%d%d", &m, &n); for(i = 1; i <= 2 * m + 1; i++) { putchar(9); if(i == 1) { //zuoshang printf("┌"); //shuiping printf("─"); for(j = 3; j < 2 * n + 1; j += 2) { //zhongshang printf("┬"); //shuiping printf("─"); } //youshang printf("┐"); } else if(i == 2 * m + 1) { //zuoxia printf("└"); //shuiping printf("─"); for(j = 3; j < 2 * n + 1; j += 2) { //zhongxia printf("┴"); //shuiping printf("─"); } //youxia printf("┘"); } else if(i % 2 == 0) { //chuizhi printf("│"); //kong printf(" "); for(j = 3; j < 2 * n + 1; j += 2) { //chuizhi printf("│"); //kong printf(" "); } //chuizhi printf("│"); } else if(i % 2 == 1) { //zhongzuo printf("├"); //shuiping printf("─"); for(j = 3; j < 2 * n + 1; j += 2) { //zhongxin printf("┼"); //shuiping printf("─"); } //you printf("┤"); } putchar(10); } }
转载请注明原文地址: https://www.6miu.com/read-3350158.html

最新回复(0)