返回 课程

信奥AC之路-2级

0% 完成
0/0 步骤
  1. 第一课:字符
    5 主题|小节
  2. 第二课 嵌套循环与矩形图案(一)
    4 主题|小节
  3. 第三课 嵌套循环与矩形图案(二)
    3 主题|小节
  4. 第四课:矩形三
    5 主题|小节
  5. 第五课:字符矩形
    7 主题|小节
  6. 第六课:直角三角形
    6 主题|小节
  7. 第七课:倒三角形
    7 主题|小节
  8. 第八课:字符三角形
    8 主题|小节
  9. 第九课:字符倒三角形
    7 主题|小节
  10. 第十课:平行四边形
    6 主题|小节
  11. 第十一课:字符直角三角形
    5 主题|小节
  12. 第十二课:左斜三角形
    6 主题|小节
  13. 第十三课:等腰三角形
    6 主题|小节
  14. 第十四课:倒置等腰三角形
    7 主题|小节
  15. 第十五课:上下对称图形
    4 主题|小节
  16. 第十六课:复杂对称图形
    5 主题|小节
  17. 第十七课:左右对称图形
    5 主题|小节
  18. 第十八课:空心图形
    5 主题|小节
  19. 第十九课:空心图形
    3 主题|小节
  20. 第二十课:嵌套应用
    4 主题|小节
  21. 第二十一课:嵌套应用二
    4 主题|小节
  22. 第二十二课:嵌套应用三
    3 主题|小节
  23. 第二十三课:嵌套应用四
    3 主题|小节
课 1, 主题|小节 4
进行中

1.4 字符的高级应用

2026年1月15日
课 进展
0% 完成

“随着我们对字符的理解加深,我们可以尝试一些更有挑战性的应用,”我说道,”比如判断字符的ASCII码是否为质数,或者生成特定模式的字符序列。”

1.4.1 判断ASCII码是否为质数

题目描述:输入一个字母,判断这个字母的ASCII码是否为质数。

样例输入

a

样例输出

no

代码实现

#include <iostream>  // 包含输入输出流库
using namespace std;

int main() {
    char ch;  // 定义一个字符变量ch
    cin >> ch;  // 从用户输入读取一个字符
    
    bool f = true;  // 定义布尔变量f,初始假设ASCII码为质数
    
    // 1不是质数,如果ASCII码小于2,将f设为false
    if(ch < 2) f = false;
    
    // 从2开始,检查是否有能整除ASCII码的数
    int i = 2;
    while(i <= ch / i) {  // 只需检查到平方根,提高效率
        if(ch % i == 0) {  // 如果能被i整除
            f = false;  // 则不是质数
            break;      // 提前结束循环
        }
        i++;  // 检查下一个可能的因子
    }
    
    // 使用三元运算符根据f的值输出结果
    cout << (f ? "yes" : "no");  // 如果f为true,输出"yes",否则输出"no"
    
    return 0;  // 程序正常结束
}

思考

  • 将字符直接作为数值进行数学运算
  • 使用经典的质数判断算法:检查2到sqrt(n)的所有整数
  • 使用条件运算符(三元运算符)简化输出

1.4.2 生成循环字符序列

题目描述:从前往后输出n个字符,先输出小写字母,如果个数不够,再输出大写字母,如果还不够就输出数字字符,如果还是不够就再输出小写字母,以此类推。

样例输入

40

样例输出

abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
abcd

代码实现

#include <iostream>  // 包含输入输出流库
using namespace std;

int main() {
    int n;  // 定义整型变量n,表示要输出的字符总数
    cin >> n;  // 从用户输入读取n的值
    
    char ch = 'a';  // 初始字符集起始为小写字母'a'
    int i = 0;      // 当前字符集内的偏移量
    
    // 循环直到输出了n个字符
    while(i < n) {
        cout << char(ch + i);  // 输出当前字符(起始字符+偏移量)
        
        // 如果当前输出的是'z'(小写字母结束)
        if(ch + i == 'z') {
            ch = 'A';  // 下一个字符集起始改为大写字母'A'
            i = -1;    // 重置偏移量为-1(下次循环会加1变为0)
            n -= 26;   // 减去已输出的26个小写字母
            cout << endl;  // 输出换行符,区分不同字符集
        } 
        // 如果当前输出的是'Z'(大写字母结束)
        else if(ch + i == 'Z') {
            ch = '0';  // 下一个字符集起始改为数字'0'
            i = -1;    // 重置偏移量
            n -= 26;   // 减去已输出的26个大写字母
            cout << endl;  // 换行
        } 
        // 如果当前输出的是'9'(数字结束)
        else if(ch + i == '9') {
            ch = 'a';  // 循环回到小写字母'a'
            i = -1;    // 重置偏移量
            n -= 10;   // 减去已输出的10个数字
            cout << endl;  // 换行
        }
        
        i++;  // 偏移量增加1,准备输出下一个字符
    }
    // 最终会按照小写字母→大写字母→数字→小写字母...的顺序循环输出n个字符
    
    return 0;  // 程序正常结束
}

思考

  • 使用变量ch控制当前字符集的起始字符
  • 使用变量i控制当前字符集内的偏移量
  • 当到达一个字符集的末尾时,切换到下一个字符集并重置偏移量
  • 通过调整剩余输出数量n,确保输出正确的字符数