#include <stdio.h>

int isIsomorphic(int a) {
    int b = a * a;
    while (a > 0) {
        if (a % 10 != b % 10) {
            return 0;
        }
        a /= 10;
        b /= 10;
    }
    return 1;
}

int main() {
    int m, n;
    scanf("%d %d", &m, &n);
    
    int hasIsomorphic = 0;
    for (int i = m; i <= n; i++) {
        if (isIsomorphic(i)) {
            printf("%d\n", i);
            hasIsomorphic = 1;
        }
    }
    
    if (!hasIsomorphic) {
        printf("No Answer\n");
    }
    
    return 0;
}

问题描述:

设 b 是 a 的平方,若 a 与 b 的尾部相同,则称 a 是同构数。例如,25 的平方是 625,所以 25 是同构数。

编写程序满足如下要求:

  • 输入两个整数 m 和 n,找出 m、n 之间全部的同构数(包括 m 和 n 本身)。

输入形式:

输入数据范围的下限 m 和上限 n,要求 m 和 n 都为整数,m 和 n 之间用一个空格分隔。

输出形式:

按照由小到大的顺序输出所有同构数,每个整数占一行。若在该范围内没有同构数,则输出字符串 No Answer。

样例输入 1:

0 30

样例输出 1:

0
1
5
6
25

样例说明 1:

在 0~30 之间的同构数有 0, 1, 5, 6, 25。

样例输入 2:

100 200

样例输出 2:

No Answer

样例说明 2:

在 100~200 之间,因为没有同构数,所以输出 No Answer。

代码解释:

  1. isIsomorphic(int a) 函数:

    • 计算 a 的平方,存储在变量 b 中。
    • 使用 while 循环,逐位比较 a 和 b 的尾部数字,直到 a 为 0。
    • 如果所有位都相同,则返回 1,表示 a 是同构数;否则返回 0。
  2. main() 函数:

    • 从标准输入读取两个整数 m 和 n。
    • 使用 for 循环遍历 m 到 n 之间的所有整数。
    • 对于每个整数 i,调用 isIsomorphic(i) 函数判断其是否为同构数。
    • 如果是同构数,则输出 i。
    • 如果没有找到任何同构数,则输出 "No Answer"。

本程序简单易懂,可以帮助您快速理解和应用同构数的判断方法。您可以根据需要修改代码,例如增加输入数据验证或优化循环效率。

C语言同构数查找算法 - 轻松实现数字魔法

原文地址: https://www.cveoy.top/t/topic/o7E0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录