PAT乙级1006,用C语言进行编程,换个格式输出整数

今天的这道题呢就放松一下了,难度也不大,比较简单。

不过为了让整个流程都比较明朗,对于这道题虽然我只花了一丢丢时间就完成了,但是还是得详细讲一讲。

这道题的大致要求是:用字母B表示百位,用字母S表示十位,用123...n来表示不为零的个位数字(n<10),例如234输出得到为BBSSS1234。

审题分析,理清逻辑,流程图

流程图如图所示,得到流程图之后其实思路还是蛮清晰的,就是对百位、十位、个位进行一个分别计数。

PAT乙级1006,用C语言进行编程,换个格式输出整数

对于这道题呢,其实很简单,就是由简到繁。

既然要求对百位、十位、个位分别按要求计数,那我们就由简到繁,先对个位来进行思考。

 思考个位,一般我们在计算个位数的时候是如何得到的呢。

给定一个整数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。 PAT乙级1006,用C语言进行编程,换个格式输出整数

在解决了个位数的问题之后,那十位数与百位数也是同样的道理。

一般我们要得到十位数,比方说之前给出的测试值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);
    }
    
}

测试结果

我试着测试了两次:

PAT乙级1006,用C语言进行编程,换个格式输出整数

PAT乙级1006,用C语言进行编程,换个格式输出整数

在Xcode上是完美运行的。

之后再去PAT上面提交。

结果正确!

PAT乙级1006,用C语言进行编程,换个格式输出整数

 总结

 这道题难度很低,通过率也都蛮高的,主要记住一点即可,由简到繁,让题变得简单。

上一篇:1006. Clumsy Factorial


下一篇:2021“MINIEYE杯”中国大学生算法设计超级联赛(1)1006 / HDU6955. Xor sum(01Trie/好题)