洛谷P1036 选数题解及其思路
思路:
1.找数,从n个数字中找k个,然后进行不同的组合,使用深搜进行查找
static void doSearch(int x,int y){
if(x>k){
if(isPrime(num))
count++;
return;
}
for(int i=y+1;i<n;i++){
//找数
num += arrayList[i];
doSearch(x+1,i);
//回溯
num -= arrayList[i];
}
}
2.判断素数
private static boolean isPrime(int num){
if(num<=1||Math.sqrt(num)==(int)Math.sqrt(num))
return false;
for(int i=2;i<Math.sqrt(num);i++){
if(num%i==0)
return false;
}
return true;
}
3.其他相关代码
private static int n;
private static int k;
private static int num;
private static int count;
private static int[] arrayList;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//get input
n = in.nextInt();
k = in.nextInt();
//create array
if(n>=1&&n<=20&&k<n){
arrayList = new int[n];
for(int i=0;i<n;i++)
arrayList[i] = in.nextInt();
}
doSearch(1,-1);
System.out.println(count);
}