今天的这道题呢就放松一下了,难度也不大,比较简单。
不过为了让整个流程都比较明朗,对于这道题虽然我只花了一丢丢时间就完成了,但是还是得详细讲一讲。
这道题的大致要求是:用字母B表示百位,用字母S表示十位,用123...n来表示不为零的个位数字(n<10),例如234输出得到为BBSSS1234。
流程图如图所示,得到流程图之后其实思路还是蛮清晰的,就是对百位、十位、个位进行一个分别计数。
对于这道题呢,其实很简单,就是由简到繁。
既然要求对百位、十位、个位分别按要求计数,那我们就由简到繁,先对个位来进行思考。
思考个位,一般我们在计算个位数的时候是如何得到的呢。
给定一个整数19,很直观,个位数就是9,我们要得到9一般是不是会用19去除以10,得到的余数就是9,而余数符号是%,也就是mod。
所以个位数就很容易得到,那就是19%10。
其次,在得到个位数为9之后,就需要输出123456789,那就更简单了,只需要用一个for循环,然后把这个值按照顺序输出不就行了么。
#include <stdio.h> int main() { int number = 0; //初始化一个正整数 int n = 0;//个位数 scanf("%d", &number); //输入该正整数 n = number%10; //个位数的数字 for(int i = 1; i <= n; i++){ printf("%d", i); } }
结果如下:
可以看到,我给了一个测试值139,当然这是只实现了个位数的,很明显得到了123456789。
在解决了个位数的问题之后,那十位数与百位数也是同样的道理。
一般我们要得到十位数,比方说之前给出的测试值139,是不是只需要先除以10得到一个13的整数,然后再求余数就可以得到3了,之后再根据3的数量得到字母S的个数。
对于百位数也是同理,只需要先除以100得到一个1的整数,然后再求余数就可以得到1了,之后再根据1的数量得到字母B的个数。
话不多说,给出代码:
#include <stdio.h> int main() { int number = 0; //初始化一个正整数 int n = 0;//个位数 int m = 0;//十位数 int a = 0;//百位数 scanf("%d", &number); //输入该正整数 n = number%10; //个位数的数字 m = number/10%10; //十位数的数字 a = number/100%10; //百位数的数字 for(int i = 0; i < a; i++){ printf("B"); } for(int i = 0; i < m; i++){ printf("S"); } for(int i = 1; i <= n; i++){ printf("%d", i); } }
我试着测试了两次:
在Xcode上是完美运行的。
之后再去PAT上面提交。
结果正确!
这道题难度很低,通过率也都蛮高的,主要记住一点即可,由简到繁,让题变得简单。