zoukankan      html  css  js  c++  java
  • [DFS]特殊的质数肋骨

    特殊的质数肋骨

    时间限制:1000MS————内存限制:256000KB

    题目描述

    农民约翰母牛总是产生最好的肋骨。
    你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们。
    农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成一个质数,举例来说:
    7 3 3 1
    全部肋骨上的数字 7331是质数;三根肋骨 733是质数;二根肋骨 73 是质数;当然,最后一根肋骨 7 也是质数。
    7331 被叫做长度 4 的特殊质数。
    写一个程序对给定的肋骨的数目 N (1<=N<=8),求出所有的特殊质数。
    数字1不被看作一个质数。

    输入

    单独的一行包含N。

    输出

    按顺序输出长度为 N 的特殊质数,每行一个。

    输入样例
    4

    输出样例
    2333
    2339
    2393
    2399
    2939
    3119
    3137
    3733
    3739
    3793
    3797
    5939
    7193
    7331
    7333
    7393

    题目解析
    就直接搜索,再判断是不是质数。不是就试下一个数。

    AC完整程序

    #include<stdio.h> 
    #include<iostream>
    using namespace std;
    const int a[6]={1,2,3,5,7,9};
    int l;
    bool su(int);
    void dfs(int,int);
    int main(){
    	scanf("%d",&l);
    	dfs(1,0);
    }
    bool su(int n){
    	if(n<2)return 0;
    	if(n==2)return 1;
    	for(int i=2;i*i<=n;i++){
    		if(n%i==0)return 0;
    	}
    	return 1;
    }
    void dfs(int dep,int sum){
    	if(dep>l){
    		printf("%d
    ",sum);
    		return ;
    	}
    	else{
    	 	for(int i=0;i<6;i++){
    	 		if(su(sum*10+a[i])){
    	 			dfs(dep+1,sum*10+a[i]);
    	 		}
    	 	}
    	}
    }
    
  • 相关阅读:
    C++反汇编第一讲,认识构造函数,析构函数,以及成员函数
    cassert(assert.h)——1个
    1012 数字分类 (20 分)
    1011 A+B 和 C (15 分)
    1009 说反话 (20 分)
    1008 数组元素循环右移问题 (20 分)
    1006 换个格式输出整数 (15 分)
    1004 成绩排名 (20 分)
    1002 写出这个数 (20 分)
    1001 害死人不偿命的(3n+1)猜想 (15 分)
  • 原文地址:https://www.cnblogs.com/luojunhang/p/12300177.html
Copyright © 2011-2022 走看看