首页 > 其他分享 >PAT Basic 1109. 擅长C

PAT Basic 1109. 擅长C

时间:2023-04-18 19:55:48浏览次数:57  
标签:... PAT .. .... CCCC Basic CCCCC CCC 1109

PAT Basic 1109. 擅长C

1. 题目描述:

当你被面试官要求用 C 写一个“Hello World”时,有本事像下图显示的那样写一个出来吗?

HWC.jpg

2. 输入格式:

输入首先给出 26 个英文大写字母 A-Z,每个字母用一个 \(7×5\) 的、由 C. 组成的矩阵构成。最后在一行中给出一个句子,以回车结束。句子是由若干个单词(每个包含不超过 10 个连续的大写英文字母)组成的,单词间以任何非大写英文字母分隔。

题目保证至少给出一个单词。

3. 输出格式:

对每个单词,将其每个字母用矩阵形式在一行中输出,字母间有一列空格分隔。单词的首尾不得有多余空格。

相邻的两个单词间必须有一空行分隔。输出的首尾不得有多余空行。

4. 输入样例:

..C..
.C.C.
C...C
CCCCC
C...C
C...C
C...C
CCCC.
C...C
C...C
CCCC.
C...C
C...C
CCCC.
.CCC.
C...C
C....
C....
C....
C...C
.CCC.
CCCC.
C...C
C...C
C...C
C...C
C...C
CCCC.
CCCCC
C....
C....
CCCC.
C....
C....
CCCCC
CCCCC
C....
C....
CCCC.
C....
C....
C....
CCCC.
C...C
C....
C.CCC
C...C
C...C
CCCC.
C...C
C...C
C...C
CCCCC
C...C
C...C
C...C
CCCCC
..C..
..C..
..C..
..C..
..C..
CCCCC
CCCCC
....C
....C
....C
....C
C...C
.CCC.
C...C
C..C.
C.C..
CC...
C.C..
C..C.
C...C
C....
C....
C....
C....
C....
C....
CCCCC
C...C
C...C
CC.CC
C.C.C
C...C
C...C
C...C
C...C
C...C
CC..C
C.C.C
C..CC
C...C
C...C
.CCC.
C...C
C...C
C...C
C...C
C...C
.CCC.
CCCC.
C...C
C...C
CCCC.
C....
C....
C....
.CCC.
C...C
C...C
C...C
C.C.C
C..CC
.CCC.
CCCC.
C...C
CCCC.
CC...
C.C..
C..C.
C...C
.CCC.
C...C
C....
.CCC.
....C
C...C
.CCC.
CCCCC
..C..
..C..
..C..
..C..
..C..
..C..
C...C
C...C
C...C
C...C
C...C
C...C
.CCC.
C...C
C...C
C...C
C...C
C...C
.C.C.
..C..
C...C
C...C
C...C
C.C.C
CC.CC
C...C
C...C
C...C
C...C
.C.C.
..C..
.C.C.
C...C
C...C
C...C
C...C
.C.C.
..C..
..C..
..C..
..C..
CCCCC
....C
...C.
..C..
.C...
C....
CCCCC
HELLO~WORLD!

5. 输出样例:

C...C CCCCC C.... C.... .CCC.
C...C C.... C.... C.... C...C
C...C C.... C.... C.... C...C
CCCCC CCCC. C.... C.... C...C
C...C C.... C.... C.... C...C
C...C C.... C.... C.... C...C
C...C CCCCC CCCCC CCCCC .CCC.

C...C .CCC. CCCC. C.... CCCC.
C...C C...C C...C C.... C...C
C...C C...C CCCC. C.... C...C
C.C.C C...C CC... C.... C...C
CC.CC C...C C.C.. C.... C...C
C...C C...C C..C. C.... C...C
C...C .CCC. C...C CCCCC CCCC.

6. 性能要求:

Code Size Limit
16 KB
Time Limit
400 ms
Memory Limit
64 MB

思路:

很有意思的题目,AC后跟孩子第一次跑通数码管的心情是一样的。定义三维字符数组letter用于存储每个字母的矩阵形式,letter的三个维度为26、LETTER_ROWLETTER_COL+1,分别代表大写字母个数、矩阵形式的行数、矩阵形式的列数+1(+1是为了存储空字符'\0'),这里直接将矩阵形式的每一行当作字符串读入,方便输入输出。然后就是对输入最后一行的句子的处理,题目没有说明句子的长度上限,只说明”句子由若干个单词组成,且每个单词包含不超过10个连续的大写字母,单词间以任何非大写英文字母分隔”,因为可能由空格符分隔,所以不能使用scanf()输入,这里我采用逐字符输入的方法,类似之前压缩字符串PAT Basic 1078. 字符串压缩与解压 的思路,遇到大写字母时就进行计数,否则就进行输出。这里定义int型数组letterRec记录每个单词中依次出现的字母,int型变量letterCount记录字母个数。其他需要注意的地方:

  • 每个单词的矩阵形式需要逐行输出,在每一行中把此单词所有字母的当前行进行输出。
  • 空白列和空白行的处理,每行输出时除了第一个字母都需要添加空白列,每个单词输出时除了第一个单词都需要添加空白行,这里我定义变量firstBlood标记是否输出了第一个单词。
  • 这里逐字符进行输入,直到遇到换行符'\n'为止,需要在开始输入前调用getchar()消耗掉倒数第二行末尾的换行符以保证输入正常,另外最后一个单词后面可能没有分隔符,记得进行尾处理。

My Code:

#include <stdio.h>

#define LETTER_ROW 7
#define LETTER_COL 5

int main(void)
{
    char letter[26][LETTER_ROW][LETTER_COL+1];
    int i=0, j=0; // iterator
    char tempCh = 0;
    int letterRec[10] = {0};
    int letterCount=0;
    int firstBlood=0; // flag of first word;
    
    for(i=0; i<26; ++i)
    {
        for(j=0; j<LETTER_ROW; ++j)
        {
            scanf("%s", letter[i][j]);
        }
    }
    
    
    letterCount = 0;
    getchar(); // consume '\n' before last line
    while((tempCh=getchar()) != '\n')
    {
        //printf("%c", tempCh);
        if(tempCh>='A' && tempCh<='Z') // count the letter
        {
            letterRec[letterCount++] = tempCh-'A';
        }
        else // need to output
        {
            if(letterCount)
            {
                if(!firstBlood) firstBlood=1;
                else printf("\n"); // get a new line if not a first word
                
                for(j=0; j<LETTER_ROW; ++j)
                {
                    for(i=0; i<letterCount; ++i)
                    {
                        if(!i) printf("%s", letter[letterRec[i]][j]);
                        else printf(" %s", letter[letterRec[i]][j]);
                    }
                    printf("\n");
                }
                
                letterCount = 0;
                
            }
        }
    }
    
    if(letterCount)
    {
        // tail handle
        if(!firstBlood) firstBlood=1;
        else printf("\n"); // get a new line if not a first word
        
        for(j=0; j<LETTER_ROW; ++j)
        {
            for(i=0; i<letterCount; ++i)
            {
                if(!i) printf("%s", letter[letterRec[i]][j]);
                else printf(" %s", letter[letterRec[i]][j]);
            }
            printf("\n");
        }
        letterCount = 0;
    }
    
    
//     for(k=0; k<5; ++k) // output test
//     {
//         for(i=0; i<LETTER_ROW; ++i)
//         {
//             for(j=0; j<5; ++j)
//             {
//                 printf("%s ", letter[k*5+j][i]);
//             }
//             printf("\n");
//         }
//         printf("\n");
//     }
    
    
    return 0;
}

标签:...,PAT,..,....,CCCC,Basic,CCCCC,CCC,1109
From: https://www.cnblogs.com/tacticKing/p/17330871.html

相关文章

  • maven的pom文件中<relativePath/>的作用
    在<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> <relativePath/><!--lookupparentfromrepository-->&l......
  • 16 Ray Tracing (Monte Carlo Path Tracing)
    关键点MonteCarloIntegrationDistributedRayTracingPathTracingRussianRoulette(RR)SamplingtheLight(puremath)1.MonteCarloIntegration蒙特卡洛积分对于没有解析式的对象,可以使用该方法求其定积分。在积分范围内随机采样一个值,作为高,使用区间长度作为宽,......
  • Plugin ‘Android WiFi ADB’ is compatible with IntelliJ IDEA only because it doe
    Plugin‘AndroidWiFiADB’iscompatiblewithIntelliJIDEAonlybecauseitdoesn’tdefineanyexplicitmoduledependenciesAndroidStudio中安装AndroidWiFiADB插件重启时报错怎么解决Plugin‘AndroidWiFiADB’iscompatiblewithIntelliJIDEAonlyb......
  • Unable to create an object of type 'NetcoremvcDbcontext'. For the different patt
    问题描述:我整个项目重新生成没有报错,但是用efcore迁移数据库命令:Add-Migrationinit就生成不了文件夹Migrations,并且报错:Unabletocreateanobjectoftype'NetcoremvcDbcontext'.Forthedifferentpatternssupportedatdesigntime,seehttps://go.microsoft.com/fwlink/......
  • PAT Basic 1107. 老鼠爱大米
    PATBasic1107.老鼠爱大米1.题目描述:翁恺老师曾经设计过一款Java挑战游戏,叫“老鼠爱大米”(或许因为他的外号叫“胖胖鼠”)。每个玩家用Java代码控制一只鼠,目标是抢吃尽可能多的大米让自己变成胖胖鼠,最胖的那只就是冠军。因为游戏时间不能太长,我们把玩家分成\(N\)组,每组......
  • selenium登录cnblogs、抽屉半自动点赞、xpath的使用、打码平台使用、scrapy介绍
    昨日回顾#1beautifulsoup4使用-xml解析库,用它来解析爬回来的html内容,从中找出我们需要的内容#2遍历文档树-.的使用soup.html.body.p.a-获取属性对象.attrs.get('href')-获取文本对象.textstringstrings-子节点,父节点,兄......
  • 菜鸟记录:c语言实现PAT甲级1004--Counting Leaves
    好消息:与上题的Emergency是同样的方法。坏消息:又错了&&c++真的比c方便太多太多。Afamilyhierarchyisusuallypresentedbyapedigreetree.Yourjobistocountthosefamilymemberswhohavenochild.InputSpecification:Eachinputfilecontainsonetest......
  • 关于软件测试领域的 Happy Path
    在软件测试领域,happypath是指一组测试用例,其中每个测试用例都覆盖了一个顺畅运行的路径,即一组不需要任何异常处理的输入和操作,以及相应的预期输出和结果。通常,这些测试用例被设计为模拟最常见、最基本和最常用的用户行为和用例场景,以确保软件在正常操作条件下可以正确地运行和处......
  • PAT Basic 1102. 教超冠军卷
    PATBasic1102.教超冠军卷1.题目描述:“教育超市”是拼题A系统的一个衍生产品,发布了各种试卷和练习供用户选购。在试卷列表中,系统不仅列出了每份试卷的单价,还显示了当前的购买人次。本题就请你根据这些信息找出教育超市所有试卷中的销量(即购买人次)冠军和销售额冠军。2.输......
  • PAT Basic 1101. B是A的多少倍
    PATBasic1101.B是A的多少倍1.题目描述:设一个数 \(A\) 的最低 \(D\) 位形成的数是 \(a_d\)。如果把 \(a_d\) 截下来移到 \(A\) 的最高位前面,就形成了一个新的数 \(B\)。\(B\) 是 \(A\) 的多少倍?例如将12345的最低2位45截下来放到123的前面,就得到45123,......