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

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-20
求1000以内的同构数。C语言题

#includemain(){ long i,j,k;k=10;for (i=1;i<=1000;i++){if (i==k) k*=10;j=i*i;if(j%k==i) printf("%ld%ld
",i,j);}}

Private Sub Command1_Click()Dim i As Integer '求1000以内的同构数。For i = 1 To 100 If i = Val(Right(Str(i * i), Len(i))) Then Print i 'If Str(i) = Str(Right(Str(i * i), Len(i))) Then Print i '这样也行。都str转一下再比较相等NextEnd Sub输出 1 25 76

以下是 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()` 函数来判断它们是否为同构数。如果是同构数,则输出到控制台中。

需要注意的是,在实际应用中,还需要考虑算法复杂度、性能优化等问题,以确保程序的效率和正确性。

下面给出一个使用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等。同构数在计算机科学、密码学等领域中有重要的应用。

#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;
}

  • 用vb找出1到1000的同构数用另一种方法……
    答:同构数是会出现在它的平方的右边的数。如5×5=25,6×6=36。VB6.0示例代码:Private Sub Form_Click() Dim i As Long Dim n As Long For i = 1 To 1000 n = i ^ 2 If (n - i) Mod 10 ^ (Len(Trim(Str(i))) = 0 Then Print i; n End If Next...
  • c 语言 1000以内的同构数
    答:include <stdio.h> void main(){ int n;int m;for(n=1;n<1000;n++){ m=n*n;if(m/10<10 && m%10==n)printf("%d %d\n",n,m);if(m/10>=10 &&m/10<100 &&m%100==n)printf("%d %d\n",n,m);if(m/100>=10&&m/100<100){ if(m%100==n||m%1000==n)printf("...
  • 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(...
  • 编程输出2~1000中的同构数。如果某数的平方结果其低位与该数本身相同...
    答:求采纳!include<stdio.h> int main(){ long i,j,k;k=10;for (i=2;i<=1000;i++){ if (i==k) k*=10;j=i*i;if(j%k==i)printf("%ld\t%ld\n",i,j);} return 0;}
  • 找出1-1000的同构数
    答:public class test { public static void main(String[] args) { //这是个很复杂很笨的办法,不想去%10,麻烦,直接这样写吧,这是把数看出一个字符串来对待 for(int x=0;x<=1000;x++){ int y=x*x;String x1=String.valueOf(x);String y1=String.valueOf(y);if(x1.equals(y1....
  • VB程序设计题:编程:输出1--1000之间的同构数(就是出现在其平方数右边...
    答:Private Sub Form_Click()Dim i As Integer For i = 1 To 1000 If Right(i ^ 2, Len(CStr(i))) = i Then Print CStr(i) + " >>> " + CStr(i ^ 2) NextEnd Sub
  • 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语言打印1000以内的同构数,我自己写了一个:不知道错在哪里,求高手帮助...
    答:include<math.h> void main(){ int x,y,flag,i;for(x=1;x<=1000;x++)//x从1开始 { y=(int)pow(x,2);flag=1;i=10;do { if(y%i==x){ flag=0;break;} else i=i*10;}while(y/i>0);// 直到平方数y小于基数i if(flag==0)printf("%d\t%d\n",x,x*x);} } ...
  • 找出1~1000之间的全部 同构数 java
    答:public class Test { / param args / public static void main(String[] args) { long i,j,k;k=10;for (i=1;i<=1000;i++){ if (i==k) { k*=10;} j=i*i;if((j%k)==i) { System.out.println(i+" "+j);} } //System.out.println("Hello World!");} } ...
  • 如何用c语言求2~1000中的守形数??
    答:守形数的概念:若正整数n是它的平方数的尾部,则称n为守形数,又称同构数。根据定义,可以得到计算的思路。1 对于范围内的每个数值,计算其平方;2 根据原数的位数,截取数值的尾部;3 将数值的尾部与原数比较,如果相等则为守形数。遍历需要的范围,即2-1000,逐一判断即可得到所有的守形数。代码如下 ...