/*
题目:排列平方数
内容:
若干不同的数字,排列组合后能产生多少个平方数?
下面的代码解决了这个问题。
对于:1,6,9
排列后,可产生3个平方数:
169
196
961
请阅读下面的代码,填写缺失的部分(下划线部分)。
注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应
题号的“解答.txt”中即可。
直接写在题面中不能得分。
public class My
{
public static void f(int[] a, int n)
{
if(n==a.length-1)
{
int k = 0;
for(int i=0; i<a.length; i++) k = ____________ + a[i]; // 填空1
int m = (int)(Math.sqrt(k)+0.5);
if(m*m==k)
{
System.out.println(k);
}
return;
}
for(int i=n; i<a.length; i++)
{
int t = a[n];
a[n] = a[i];
a[i] = t;
f(a, _______________); // 填空2
t = a[n];
a[n] = a[i];
a[i] = t;
}
}
public static void main(String[] args)
{
int[] a = {1,9,6};
f(a, 0);
}
}
*/
1 public class pro15 2 { 3 public static void f(int[] a, int n) 4 { 5 if(n==a.length-1) 6 { 7 int k = 0; 8 for(int i=0; i<a.length; i++) k = k*10 + a[i]; // 填空1 9 int m = (int)(Math.sqrt(k)+0.5); 10 if(m*m==k) 11 { 12 System.out.println(k); 13 } 14 return; 15 } 16 17 for(int i=n; i<a.length; i++)//这个递归应该是遍历了几个数的全排列,但真的没有理解, 18 { 19 int t = a[n];//这里做了一个交换,如果把初始值[1,9,6]带进去的话,就是a[0]与a[0]交换, 20 a[n] = a[i]; 21 a[i] = t; 22 23 f(a, n+1); // 填空2 24 25 t = a[n]; 26 a[n] = a[i]; 27 a[i] = t; 28 } 29 } 30 31 public static void main(String[] args) 32 { 33 int[] a = {1,9,6}; 34 f(a, 0); 35 } 36 }
/*
递归,真没理解清楚,
*/