C语言实现同构数查找算法
#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
总结:
该算法通过循环比较两个数的尾部来判断是否为同构数,代码简洁易懂,效率较高。该算法适用于各种同构数查找问题,例如寻找特定范围内所有同构数等。
原文地址: https://www.cveoy.top/t/topic/o7EW 著作权归作者所有。请勿转载和采集!