求1000以内的同构数,用最简单的c语言

如题所述

以下是 C 语言实现求解 1000 以内的同构数的程序:

```c
#include <stdio.h>

// 判断两个数是否为同构数
int isIsomorphic(int a, int b) {
int a_digits[10] = {0}; // 存储数字 a 中各个位上出现的次数
int b_digits[10] = {0}; // 存储数字 b 中各个位上出现的次数

while (a != 0 && b != 0) {
a_digits[a % 10]++; // 统计数字 a 中各个位上出现的次数
b_digits[b % 10]++; // 统计数字 b 中各个位上出现的次数
a /= 10;
b /= 10;
}

// 比较数字 a 和 b 中各个位上出现的次数是否相等
for (int i = 0; i < 10; i++) {
if (a_digits[i] != b_digits[i]) {
return 0; // 如果不相等,则不是同构数,返回 0
}
}

return 1; // 否则是同构数,返回 1
}

int main() {
printf("1000 以内的同构数有:\n");
for (int i = 1; i <= 1000; i++) {
for (int j = i + 1; j <= 1000; j++) {
if (isIsomorphic(i, j)) {
printf("%d 和 %d\n", i, j);
}
}
}

return 0;
}
```

在上述代码中,我们首先定义了一个 `isIsomorphic()` 函数,该函数接受两个整数作为参数,并返回一个整数值,表示这两个数是否为同构数。在函数内部,我们使用两个数组 `a_digits` 和 `b_digits` 分别记录这两个数字中各个位上出现的次数。具体来说,我们用 `a % 10` 和 `b % 10` 来获取数字 a 和 b 的个位数,并将其对应的数组元素加一。然后,我们将数字 a 和 b 分别除以 10,去掉个位数,重复以上步骤,直到它们的值均为零。

在比较阶段,我们将数组 `a_digits` 和 `b_digits` 中的每个元素逐一比较,如果它们不相等,则说明这两个数字不是同构数,返回 0;否则,它们是同构数,返回 1。

在 `main()` 函数中,我们使用两个循环枚举所有可能的整数对,并调用 `isIsomorphic()` 函数来判断它们是否为同构数。如果是同构数,则输出到控制台中。

需要注意的是,在实际应用中,还需要考虑算法复杂度、性能优化等问题,以确保程序的效率和正确性。
温馨提示:内容为网友见解,仅供参考
第1个回答  2023-03-15
下面给出一个使用C语言实现找出1000以内的同构数的示例代码:

```c
#include <stdio.h>

int main() {
int i, j;
for (i = 1; i < 10; i++) {
for (j = 0; j < 10; j++) {
int n = i * 100 + j * 10 + i;
if (n < 1000) {
printf("%d ", n);
}
}
}
return 0;
}
```

在上面的代码中,我们使用嵌套的`for`循环来遍历1000以内的所有数。首先,我们生成一个三位数n,它的中间一位是任意数字,而两端都是相同的数字。如果n小于1000,则输出n。需要注意的是,我们使用了`printf`函数来输出n,并在输出后添加了一个空格,这样可以使输出的数字排列整齐。

需要注意的是,该程序只能找出1000以内的同构数,如果需要找出更大的同构数,需要将上面代码中的`for`循环的范围更新为`for (i = 1; i < 100; i++)`或更大的数值。

需要注意的是,同构数也被称为回文数或镜面数,是一种与回文数类似的数学概念。同构数是指一个数的数字按相反的顺序排列,与原数相等,例如121、1221等。同构数在计算机科学、密码学等领域中有重要的应用。
第2个回答  2016-11-16
#include<stdio.h>
#include <cmath>
int main()
{ int i;
long result;
for(i=1; i<=1000; i++ )
{
result = pow(i,2);
if( i<10 && i == result%10 )
else if( i>=10 && i == result%100 )
else if( i>=100 && i == result%1000 )
else
continue;
}
return 0;
}追问

能用c语言最基础语句做出来吗,这好多没学过

追答

#include 是数学函数
result = pow(i,2); 是求i 的平方,就是数学函数
if else 是c语言中常用的判断语句,
if( i<10 && i == result%10 ) 判断10以内的数,下面的是判断100以内的,1000以内的。continue; 是结束语句,然后最后再返回0

#include 是数学函数
result = pow(i,2); 是求i 的平方,就是数学函数
if else 是c语言中常用的判断语句,
if( i<10 && i == result%10 ) 判断10以内的数,下面的是判断100以内的,1000以内的。continue; 是结束语句,然后最后再返回0

本回答被网友采纳

求1000以内的同构数,用最简单的c语言
if (a_digits[i] != b_digits[i]) { return 0; \/\/ 如果不相等,则不是同构数,返回 0 } } return 1; \/\/ 否则是同构数,返回 1 } int main() { printf("1000 以内的同构数有:\\n");for (int i = 1; i <= 1000; i++) { for (int j = i + 1; j <= 1000; j++...

c 语言 1000以内的同构数
if(m\/10000>=10&&m\/10000<100&&m%1000==n)printf("%d %d\\n",n,m);} }

c语言 打出1~1000所有的同构数
include<string.h> char *right(char *ms,int len); \/*截取一个字符串尾部长为len个字符的子串*\/ void main(){ long a;int len;char as[10];char ms[20];printf("求[1,10000]中的同构数:\\n");for(a=1;a<=10000;a++){ ultoa(a,as,10); \/*数a转换为字符串,存入as*...

c语言编程:找出1到1000的全部同构数
include<stdio.h>int IsTongGou(int a) {\/\/判断是否同构 int b=a*a; while(a!=0){if(b%10!=a%10) { return 0; } else { b=b\/10; a=a\/10; } } return 1;}int main() { for(int i=1;i<1000;i++) { if(IsTongGou(i)) { printf(...

C语言 输出5--1000之间得同构数,即一个数平方的低位等于该数,例如5的...
include<stdio.h> main(){ long i,j,k;k=10;for (i=5;i<=1000;i++){ if (i==k) k*=10;j=i*i;if(j%k==i) printf("%ld\\t%ld\\n",i,j);} }

用c语言求同构数
找出1至10000之间的全部同构数的C语言程序 例如:5是25右边的数,25是625右边的数,5和25都是同构数数*\/ include<stdio.h> int main(){ long i,j,k;k=10;for (i=1;i<=10000;i++){ if (i==k) k*=10;j=i*i;if(j%k==i) printf("%ld\\t%ld\\n",i,j);} } ...

C语言考试,“同构数”编程——想看看正解
){ long i,j,n=0,k=10;\/*i为测试的数字,就是1-10000,n用来记录同构数的次数,其他的能不能理解就看你了*\/ for(i=1;i<=10000;i++){ if(i==k)k=k*10;j=i*i;if(j%k==i)n++;} printf("1-10000内同构数的个数为%d\\n",n);return 0;} 已在VC++6.0下调试通过。

...2.输出100~1000之内的同构数 如:625*625=39062
{ int num;char s[128];printf("input a number:");scanf("%d",&num);itoa(num,s,2);printf("二进制是:%s\\n",s);} 2.include<stdio.h> main(){ int num,i;printf("请输入一个数(100~1000之间):");scanf("%d",&num);if(num>=100&&num<=1000){ i=num*num;printf("%d*...

求1-100之间的同构数。c语言。 谢谢
下面是一个C语言程序,用于打印1-100之间的同构数:include <stdio.h> int main() { int i, j;for (i = 1; i <= 100; i++) { j = i * i;if (i == j % 10 || i == j % 100) { printf("%d ", i);} } return 0;} 该程序通过循环遍历1-100之间的整数,对每个...

用C++编1到1000的同构数
){ int n;cout<<"Please input the edge of the number"<<endl;cin>>n;search(n);return 0;} 差不多就这样吧,如果还要着的精确点,把int改成long int吧。效果也不是很明显,还有就是将其改成字符窜,按尾部进行比较,这里我就不写了,这个程序对1000以内的还是可以判断的,没有问题。

相似回答