解题思路:
一开始只写了四个循环进行简单判断,后来看了UP主视频才发现一个卡片只能出现一次,所以循环时要跳过。
因为有两个9,所以会出现相同值的情况,判断素数后还要判断是否已经存在该数,不能简单用计数器来计数,利用Set函数来存储,可以自动删除重复数。最后返回Set集合的长度即可。
解题代码:
public static void main(String[] args) {
Set<Integer>set=new HashSet<Integer>();
int nums[]={1,9,4,9};
for(int i=0;i<nums.length;i++){
for(int j=0;j<nums.length;j++){
if(j==i)
continue;
for(int k=0;k<nums.length;k++){
if(k==j||k==i)
continue;
for(int m=0;m< nums.length;m++){
if(m==i||m==j||m==k)
continue;
String str=""+nums[i]+nums[j]+nums[k]+nums[m];
if(isPrime(str)){
//判断为素数后还要判断是否已经存在
set.add(Integer.parseInt(str));
}
}
}
}
}
System.out.println(set.size());
}
public static boolean isPrime(String str){
int num=Integer.parseInt(str);
for(int i=2;i<Math.sqrt(num);i++){
if(num%i==0){
return false;
}
}
return true;
}
}