PTA天梯赛L1刷题总结(二)10分题型
从这里开始,题目通常都是先给N,然后给出N行数据,虽然题目中看上去输出样例是一起输出,但是我们在编译器里可以是针对每一个样例给出结果(不用把示例都输入后再输出结果),意味着不需要用数组储存(或者使用结构体),可以节省代码量。 一般情况下,题目还会要求行尾不能有空格,那么我们可以在输出时分两种情况,如if(i==n)时 输出xxx, else 输出xxx 以及空格。 测试时注意使用英文的标点符号 最好在变量需要时再进行初始化,这样也比较方便(但是好像Code Blocks不支持这样操作,需要一开始就定义变量)。 在计数时注意赋初始值( 一般为0),否则该变量数值不确定 接下来说说10分题出现的题型(旁边是题号) 给一个整数,输出每一位上的数字 7 L1-007 念数字 (10分) 输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。 如果是过去的思维,通常会采用C语言的switch-case结构,先读入整数,再获取每一位上的数字,用switch-case结构来读出每一位的拼音 如果是用更聪明的想法,其实数字和拼音是 存在一个一一映射的关系(hash) ,那么可以用读入字符串的方式读入输入示例。如果是char型数组的话,可以用二维数组char m 定义,因为二维数组中的每个一维数组都存储着拼音,当然如果使用string数组就更方便了。或者使用STL容器的map来做也很快(后面大题再说)。 下面以三种做法为例进行对比 1)读入整型法 这里涉及到如何获取每一位的数字的做法。很容易理解,以106为例,106%10,余数为6,即个位,然后106/10后再取余,循环的终止条件在于/10之后为0。这样依次获取的数字是从右往左读的,所以在输出时需注意。在这里我的做法是把获取的每一位数存入数组,在倒序输出。 #include <stdio.h> #include <stdlib.h> void num ( int s ) { switch ( s ) { case 1 : printf ( "yi" ); break ; case 2 : printf ( "er" ); break ; case ...