C语言同构数查找算法 - 轻松实现数字魔法
#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。
代码解释:
-
isIsomorphic(int a)函数:- 计算 a 的平方,存储在变量 b 中。
- 使用 while 循环,逐位比较 a 和 b 的尾部数字,直到 a 为 0。
- 如果所有位都相同,则返回 1,表示 a 是同构数;否则返回 0。
-
main()函数:- 从标准输入读取两个整数 m 和 n。
- 使用 for 循环遍历 m 到 n 之间的所有整数。
- 对于每个整数 i,调用
isIsomorphic(i)函数判断其是否为同构数。 - 如果是同构数,则输出 i。
- 如果没有找到任何同构数,则输出 "No Answer"。
本程序简单易懂,可以帮助您快速理解和应用同构数的判断方法。您可以根据需要修改代码,例如增加输入数据验证或优化循环效率。
原文地址: https://www.cveoy.top/t/topic/o7E0 著作权归作者所有。请勿转载和采集!