首先直接上代碼,這題是第一次發現&&的短路作用
/**
*
*Dtcg
*2014.12.09
***************/
#include <cstdio>
#include <map>
#include <cmath>
#include <vector>
#include <sstream>
#include <cstring>
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
int n,sum[21];
bool use[21];
inline bool is_prime(int x){
for(int i=2;i*i<=x;i++)
if(x%i==0)
return 0;
return 1;
}
inline void dfs(int cur){
if(cur==n&&is_prime(sum[n-1]+1)){
printf("%d",sum[0]);
for(int i=1; i<n; i++)
printf(" %d",sum[i]);
cout<<endl;
}
else
for(int i=1;i<=n;i++)
if(is_prime(i+sum[cur-1])&&!use[i]){
sum[cur]=i;
use[i]=true;
dfs(cur+1);
use[i]=false;
}
}
int main(){
int k=1;
while(cin>>n){
memset(sum,0,sizeof sum);
memset(use,0,sizeof use);
sum[0]=use[1]=1;
printf("Case %d:\n",k++);
dfs(1);
cout<<endl;
}
return 0;
}
看這兩句
if(is_prime(i+sum[cur-1])&&!use[i])
在看
if(!use[i]&&is_prime(i+sum[cur-1]))
會發現後者需要的時間更多,所以呢,這是&&的短路作用