PTA 循环 7-10 同构数

一个数恰好出现在它的平方数的右端,这个数就称为同构数。找出1~1000之间的全部同构数。

输出格式:

在一行中输出所有满足条件的同构数,每个数输出占6列。没有其它任何附加格式和字符。

输出样例:

     1     5     6    25    76   376   625

结尾无空行

思路:通过取余数的方法来获取同构数。

#include<stdio.h>
int main()
{
	int i,n;//i为循环次数   n为同构数位数
	for(i=1;i<=1000;i++) 
	{
		for(n=1;n<=1000;n=n*10)//判断同构数位数
		if(i/n==0)break; // 1/10=0  5/10=0  25/100=0 
		if((i*i)%n==i) //   1%10=1  25%10=5  625%100=25
	 	printf("%6d",i);
	 } 
	 return 0;
}


        

在Java同构数是指那些通过改变数字的位置(如旋转数组或翻转数字顺序)而得到的新数字与其原始形式相等的整数。例如,数字1689和9681就是一对同构数。 要找出1到1000之间的所有同构数,可以编写一个程序遍历这个范围,并对每个数进行一些操作,比如反转、排序或翻转数字序来检查是否变成原来的数。这里是一个简单的步骤说明: 1. 创建一个集合(如HashSet)来存储找到的同构数,避免重复。 2. 遍历1到1000的整数。 3. 对当前数字进行操作(如转换成字符串、反转字符、分割数组并排序等),然后将处理后的结果转化为整数。 4. 检查新生成的数是否与原数相等,如果相等就添加到集合。 5. 循环结束后,输出集合里的所有同构数。 在实际编程时,你可以创建一个名为`isIsomorphicNumber`的函数,用于检测两个数是否互为同构数,然后在一个循环里调用该函数。 ```java import java.util.HashSet; import java.util.Set; public class Main { public static boolean isIsomorphic(int num1, int num2) { String strNum1 = String.valueOf(num1); String strNum2 = String.valueOf(num2); // 如果长度不同,则肯定不是同构数 if (strNum1.length() != strNum2.length()) return false; char[] chars1 = strNum1.toCharArray(); char[] chars2 = strNum2.toCharArray(); // 使用哈希映射检查对应位置的字符是否一一对应相等 for (int i = 0; i < strNum1.length(); i++) { if (chars1[i] != chars2[i]) { if (mapping.get(chars1[i]) != chars2[i]) return false; mapping.put(chars1[i], chars2[i]); } else { mapping.remove(chars1[i]); // 如果遇到相同的字符,更新映射并移除已存在的映射 } } // 如果所有字符都匹配,那么这两个数就是同构数 return true; } public static void main(String[] args) { Set<Integer> isomorphicNumbers = new HashSet<>(); Map<Character, Character> mapping = new HashMap<>(); for (int i = 1; i <= 1000; i++) { for (int j = i; j <= 1000; j++) { if (isIsomorphic(i, j)) { isomorphicNumbers.add(j); } } } System.out.println("1-1000间的同构数有:"); for (Integer num : isomorphicNumbers) { System.out.print(num + " "); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值