枚举
1.循环枚举
for(int a=1;a<=3;a++){
for(int b=1;b<=3;b++){
for(int c=1;c<=3;c++){
for(int d=1;d<=3;d++){
for(int e=1;e<=3;e++){
for(int f=1;f<=3;f++){
for(int g=1;g<=3;g++){
for(int h=1;h<=3;h++){
for(int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
if(a+b+c+d+e+f+g+h+i+j==n)ans++;
}
}
}
}
}
}
}
}
}
}
2.子集枚举
for(int S=0;S<1<<n;S++){
if(__builtin_popcount(S)==k){
int sum=0;
for(int i=0;i<n;i++)if(S&(1<<i))sum+=a[i];
if(isPrime(sum))ans++;
}
}
3.排列枚举
int a[10],n;
int main(){
cin>>n;
for(int i=1;i<=n;i++)a[i]=i;
do{
for(int i=1;i<=n;i++)printf("%5d",a[i]);
cout<<'\n';
}while(next_permutation(a+1,a+n+1));
return 0;
}

浙公网安备 33010602011771号