public class 排他平方数 {
public static int arr[]=new int [6];
public static int a[]=new int [12];
public static void judge(int x) {
int n=x;
for(int i=0;i<=6;i++) {
arr[i]=n%10;
n=n/10;
}
n=n*n;
for(int i=0;i<=12;i++)
{
a[i]=n%10;
n=n/10;
}
if(butong()&&pingfang()) {
System.out.println("");
}
}
public static boolean butong() {
for(int i=0;i<=6;i++) {
for(int j=i-1;j<=6;j++) {
if(arr[i]==arr[j])
return false;
}
}
return true;
}
public static boolean pingfang()
{
for(int i=0;i<=6;i++) {
for(int j=0;j<=12;j++) {
if(arr[i]==a[j])
return false;
}
}
return true;
}
public static void main(String [] args) {
for(int i=1000000;i<=999999;i++) {
judge(i);
}
}
}
for(int i=1000000;i<=999999;i++)
你主函数的循环i开始比结束的值还大,不会进行啊
正确的代码可参考
public static boolean Compare(int num){
int[] store = new int[6];
String midStr = String.valueOf(num);
//此for循环是将midStr转为数字存进Store数组
for (int i = 0; i < midStr.length(); i++) {
store[i] = midStr.charAt(i) - 48;
}
//比较这个数中是否有相同的数字
for (int i = 0; i < store.length; i++) {
for (int j = i + 1; j < store.length; j++) {
if (store[i] == store[j]){
return true;
}
}
}
return false;
}
//将平方数以字符串str传入
public static boolean Compare2(String str,BigDecimal num){
int[] PingStore = new int[str.length()];
//该for循环将str转为数字存在PingStore数组中
for (int i = 0; i < str.length(); i++) {
PingStore[i] = str.charAt(i) - 48;
}
String numStr = num.toString();
int[] midNum = new int[6];
for (int i = 0; i < numStr.length(); i++) {
midNum[i] = numStr.charAt(i) - 48;
}
//比较这个数与它的平方数是否有相同的数字
for (int i = 0; i < 6; i++) {
for (int j = 0; j < PingStore.length; j++) {
if (midNum[i] == PingStore[j]){
return true;
}
}
}
return false;
}
public static void main(String[] args) {
for (int i = 100000; i < 1000000; i++) {
if (!Compare(i)){ //若Compare(i)为false,则继续
BigDecimal mid = new BigDecimal(i);
//multiply():java.math.BigDecimal里的方法,用来求乘积
String PingNum = mid.multiply(mid).toString();
if (!Compare2(PingNum,mid)){ //若Compare2(PingNum,mid)为false,则继续
System.out.println(mid);
}
}
}
}
代码错误很多。
存在数组越界,两个数组都越界了,分别定义6、12长度大小的数组,是不能访问索引为6、12对应的数组元素的(循环条件加了等号)。
看看是不是这个:
import java.util.*;
public class A
{
static Set distinct(long x)
{
Set t = new HashSet();
String s = "" + x;
for(int i=0; i<s.length(); i++) t.add(s.charAt(i));
return t;
}
static boolean f(int x)
{
long y = (long)x * x;
Set a = distinct(x);
Set b = distinct(y);
if(a.size() != 6) return false;
a.retainAll(b);
return a.isEmpty();
}
public static void main(String[] args)
{
final int A = 1000 * 100;
final int B = A * 10;
for(int i=A; i<B; i++)
{
if(f(i))
System.out.println(i);
}
}
}