码迷,mamicode.com
首页 > Web开发 > 详细

JSK-16014 打印字母图形【打印图案】

时间:2018-10-04 20:26:37      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:意图   表达式   oid   stdio.h   描述   程序   lse   信息   键盘输入   

打印字母图形
由键盘输入一个大写字母(A 到 Z 中的任意一个),输出如下图所示由相关大写字母组成的图形。所输入的字母一定为输出文件的第一个字符(位于图形的左上角),其余部分的字母构成规律和分布由样例给出。
输入格式
输入只有一行,仅为一个大写字母。
输出格式
输出包含一个如样例所示的图形。注意图形的行数与输入的字母有关,图形中的第一行最左侧一定是你输入的那个字母。
样例输入1
C
样例输出1
CBAAB
??BAA
????A
样例输入2
E
样例输出2
EDCBAABCD
??DCBAABC
????CBAAB
??????BAA
????????A
题目来源
2016 年海淀区中小学生信息学奥林匹克竞赛

问题链接JSK-16014 打印字母图形
问题描述:(略)
问题分析
????这是一个打印图案问题。关键是找出其中的规律与关系。
????对于输入的字母,首先要先算出需要打印几行,以便程序控制输出的行数。
????实际上,输出的每一行包括三部分组成,空格、字符串和换行。其数量都与行数成函数关系。这种函数关系在程序中通常是用表达式给出的,并写在程序中。
????这个问题的另外一个关键的输出的字符是有规律变化的,程序中用函数nextchar()来计算下一个输出的字符。用程序计算这种变化规律,相比数学公式来说更加方便灵活。
程序说明:(略)
参考链接:(略)
题记:规律与关系尤为重要。

AC的C语言程序如下:

/* JSK-16014 打印字母图形 */

#include <stdio.h>

char c, a;
int step;
char nextchar(char a)
{
    if(a == 'A' && step == -1) {
        step = -step;
        c--;
        return a;
    } else if(a == c && step == 1) {
        step = -step;
        return a;
    } else
        return a + step;
}

int main(void)
{
    int n, i, j;

    scanf("%c", &c);

    a = c;
    n = c - 'A' + 1;

    step = -1;
    for(i = 0; i < n; i++) {
        for(j = 0; j < i; j++)
            putchar(' ');
        for(j = 0; j < 2 * (n - i) - 1; j++) {
            putchar(a);
            a = nextchar(a);
        }
        putchar('\n');
    }

    return 0;
}

JSK-16014 打印字母图形【打印图案】

标签:意图   表达式   oid   stdio.h   描述   程序   lse   信息   键盘输入   

原文地址:https://www.cnblogs.com/tigerisland45/p/9743206.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!