1 条题解

  • 0
    @ 2025-8-24 21:15:44

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar chen_zhe
    Aya 敲可爱的~

    搬运于2025-08-24 21:15:43,当前版本为作者最后更新于2023-11-13 20:16:14,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    Source & Knowledge

    2023 年 11 月语言月赛,由洛谷网校入门计划/基础计划提供。

    考察循环嵌套结构、质数的定义。

    文字题解

    这道题目是一道典型的输出字符画像的题目,考察了循环嵌套结构。

    首先,我们外层循环变量 ii 控制行数,内层循环控制列数。但本题与寻常的题目并不一样——本题要求每一列输出 i2i^2 个非空白字符,而且计算中和列数也是有关系的。因此内层循环需要定义两个变量进行循环,一个是 jj——表示输出了第几个字母,一个是 kk——表示这是第几列。

    在这里,一个常见的问题是,如何获取当前本应填充的字母的 ASCII 码?假设我们用变量 ch 存储当前本应填充的字母,那么 ch 在进行算术运算时,其自动代入的就是 ch 这个字母的 ASCII 码值。例如说:int x=k+ch,就表达出了当前列数加上当前本应填充的字母的 ASCII 码的含义。由于大写字母的 ASCII 码值连续,因此我们可以直接使用 char ch='A'+i-1 的方式,获取第 ii 行开头的字母是哪一个。

    下一个关键点是质数。让我们回顾一下质数的定义:

    一个质数是指,不能被 11 和自身以外的正整数所能整除的正整数。

    根据这个定义,对于一个正整数 xx,我们总能写出一个循环语句去判断其是否是质数:

    bool flag=true;//如果 flag 为 true,则 x 是质数,否则 x 不是质数。
    for (int j=2;j<=x-1;j++) {
    	if (x%j==0) //从 2 到 j-1,一个一个试除 x,判断能否整除 x。
    		flag=false;//如果能整除,说明 x 不是质数。
    }
    

    我们可以根据此,判断当前列数加上当前本应填充的字母的 ASCII 码是否为质数。如果是,则输出这个字母,并且让字母变为下一个字母。否则输出空格。

    详细的代码请参考视频题解。

    • 1

    信息

    ID
    9399
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者