zoukankan      html  css  js  c++  java
  • 画表格蓝桥杯

    欢迎访问我的新博客:http://www.milkcu.com/blog/

    原文地址:http://www.milkcu.com/blog/archives/1366355580.html

    简述

    这是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("%4d", 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);
    	}
    }
  • 相关阅读:
    CSS 文本换行及指定行数显示
    JavaScript随机生成六位数
    Vue 添加评论,node作后台保存到MongoDB数据库中
    详情页面中根据ID请求数据
    多线程学习笔记
    串口 PLC 编程FAQ
    NI CWGraph 显示波形图
    华为企业级AS111-S,比较垃圾的地方
    jqmobile FAQ
    给easyui datebox扩展一个清空按钮,无侵入
  • 原文地址:https://www.cnblogs.com/milkcu/p/3808938.html
Copyright © 2011-2022 走看看