标签:final
题目请点我
题解:
这道题其实很简单,dfs+从前往后判断就好了,每递归一层就进行一次判断。
USACO第一章节,最后一发。也是放假回家前的最后一道题!!
代码实现:
/*
ID: eashion
LANG: C++
TASK: sprime
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#define MAX 9
using namespace std;
int N;
int num[MAX];
void print();
void dfs(int len);
bool test(int len);
bool if_prime(int x);
int main()
{
freopen("sprime.in","r",stdin);
freopen("sprime.out","w",stdout);
while( scanf("%d",&N) != EOF ){
memset(num,0,sizeof(num));
dfs(0);
}
return 0;
}
void dfs(int len){
if( len == N ){
print();
return ;
}
for( int i = 0; i < 10; i++ ){
num[len] = i;
if( test(len) ){
dfs(len+1);
}
}
return ;
}
bool test(int len){
int tmp = 0;
for( int i = 0; i <= len; i++ ){
tmp *= 10;
tmp += num[i];
}
if( !if_prime(tmp) ){
return false;
}
return true;
}
bool if_prime(int x){
if( x == 0 || x == 1 ){
return false;
}
if( x == 2 || x == 3 ){
return true;
}
int up_B = sqrt(x);
for( int i = 2; i <= up_B; i++ ){
if( x%i == 0 ){
return false;
}
}
return true;
}
void print(){
for( int i = 0; i < N; i++ ){
printf("%d",num[i]);
}
printf("\n");
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:final
原文地址:http://blog.csdn.net/eashion1994/article/details/46954933