CSP2019-J1-真题解析-阅读程序

二、阅读程序

1、阅读以下程序

#include <cstdio>
#include <cstring>
using namespace std;
char st[100];
int main() {
   
    scanf("%s", st);
    int n = strlen(st);
    for (int i = 1; i <= n; ++i) {
   
        if (n % i == 0) {
   
            char c = st[i - 1];
            if (c >= 'a')
                st[i - 1] = c - 'a' + 'A';
        }
    }
    printf("%s", st);
    return 0;
}

【分析】此题代码逻辑比较清晰简单,输入一个字符串,然后依次遍历每一个字符,同时判断,下标i是否是字符串长度n的约数,若是则继续判断字符是否是大于’a’的字符,若是则将其转换为大写字母。
•判断题
1、输入的字符串只能由小写字母或大写字母组成。()
错误,根据分析,程序并无该限制
2、若将第8行的“i = 1”改为“i = 0”,程序运行时会发生错误。()
正确,第8行是for循环遍历每一个字符,i从1至n,若将“i = 1”改为“i = 0”,显然i=0时,n%i会产生错误结果,然后st[i-1]得到st[-1]会发生数组越界。
3、若将第8行的“i <= n”改为“i * i <= n”,程序运行结果不会改变。()
错误,修改后,遍历的范围就变小了,结果显然是可能改变的
4、若输入的字符串全部由大写字母组成,那么输出的字符串就跟输入的字符串一样。()
正确,因为遍历字符的时候,只是有条件地把部分字符做了大写转换,若原字符串本身都是大写字母构成,则处理后,输出结果与输入结果相同
•选择题
5、若输入的字符串长度为18,那么输入的字符串跟输出的字符串相比,至多有()个字符不同。
这里转换一下思路,长度n=18,只有那些下标是18的约数的字符才有可能被更新,所以看18有多少个约数即可,直接枚举可得1,2,3,6,9,18,共6个
6、若输入的字符串长度为(),那么输入的字符串跟输出的字符串相比,至多有36个字符不同。
与第5题一样,此题是找出选项里哪个数的约数36个,根据质因数分解定理,若一个正整数P的质因数分解为:
P = p 1 r 1 ∗ p 2 r 2 ∗ . . . ∗ p n r n P=p_1^{r_1}*p_2^{r_2}*...*p_n^{r_n} P=p1r1p2r

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

严老师编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值