枚举

 

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;
} 

  

posted @ 2023-03-02 09:46  天雷小兔  阅读(20)  评论(0)    收藏  举报