1 条题解

  • 0
    @ 2025-10-30 14:34:13

    思路分析

    1. 任务拆解:

    • 读取整数n
    • 遍历1到n的所有数字
    • 判断每个数字i是否是同构数(i出现在i²的右端)
    • 统计同构数的个数
    • 输出统计结果

    2. 关键点分析:

    • 同构数定义:数字i出现在i²的末尾
    • 同时检查i和i²的对应位是否相等
    • 从最低位开始逐位比较
    • 如果i的所有位都与i²的对应位匹配,则是同构数

    3. 步骤规划:

    • 读取n的值
    • 初始化计数器c=0
    • 循环遍历1到n的每个数字i:
      • 计算i²
      • 设置临时变量i1=i,i2=i²
      • 循环比较i1和i2的每一位:
        • 获取i1和i2的个位数字
        • 如果不相等,跳出循环
        • 删除个位数继续比较
      • 如果i1变为0(所有位都匹配),计数器加1
    • 输出计数器值

    4. 代码对应:

    • cin>>n; → 读取整数n
    • for(int i=1;i<=n;i++) → 遍历1到n
    • int i2=i*i,i1=i; → 计算平方并保存临时变量
    • while(i1) → 逐位比较
    • w1=i1%10; w2=i2%10; → 获取个位数字
    • if(w1!=w2) break; → 如果对应位不相等则跳出
    • i1/=10; i2/=10; → 删除个位数继续比较
    • if(i1==0) c++; → 如果所有位都匹配则计数
    • cout<<c; → 输出同构数的个数
    • 1

    信息

    ID
    793
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    (无)
    递交数
    198
    已通过
    104
    上传者