#include <stdio.h>

// 判断两个数的尾部是否相同
int isIsomorphic(int a, int b) {
    while (a > 0 && b > 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; // 是否存在同构数的标志位
    
    // 遍历m到n之间的所有数
    for (int i = m; i <= n; i++) {
        int square = i * i;
        if (isIsomorphic(i, square)) {
            printf("%d\n", i);
            hasIsomorphic = 1;
        }
    }
    
    // 如果不存在同构数,则输出'No Answer'
    if (!hasIsomorphic) {
        printf("No Answer\n");
    }
    
    return 0;
}

算法原理:

该算法使用C语言实现同构数查找功能。首先定义一个函数isIsomorphic来判断两个数的尾部是否相同,该函数通过循环比较两个数的最后一位,如果所有位都相同则返回1,否则返回0。

main函数中,首先从输入中获取范围的下限m和上限n。然后,遍历m到n之间的所有数,并判断每个数是否为同构数。如果该数是同构数,则将其打印出来,并将标志位hasIsomorphic设置为1。

最后,如果标志位hasIsomorphic仍然为0,则表示范围内没有找到同构数,输出'No Answer'。

代码示例:

样例输入1:

0 30

样例输出1:

0
1
5
6
25

样例输入2:

100 200

样例输出2:

No Answer

总结:

该算法通过循环比较两个数的尾部来判断是否为同构数,代码简洁易懂,效率较高。该算法适用于各种同构数查找问题,例如寻找特定范围内所有同构数等。

C语言实现同构数查找算法

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

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