USACO Superprime Rib(dfs)

来源:互联网 发布:ai cs6是什么软件 编辑:程序博客网 时间:2024/05/02 06:13

题目请点我
题解:
这道题其实很简单,dfs+从前往后判断就好了,每递归一层就进行一次判断。
USACO第一章节,最后一发。也是放假回家前的最后一道题!!
代码实现:

/*ID: eashionLANG: C++TASK: sprime*/#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#define MAX 9using 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");}
0 0
原创粉丝点击