zoukankan      html  css  js  c++  java
  • 2319__1.5.3 Superprime Rib 特殊的质数肋骨

    [Submit][Status][Forum]

    Description

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

    Input

    单独的一行包含N。

    Output

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

    Sample Input

    4

    Sample Output

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

    分析:还是没有完全理解到递归的思想,想不到递归那去。想了很久也没搞定,在网上找了题解,所以这题用递归。不管是几位数,它的第一个数一定是,2,3,5,7,确定了第一个数,第二个数之后的数就在(1,9)之间遍历,如果是素数并且位数等于所给的位数就输出。终止条件就是满足条件的位数等于所给的位数。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cmath>
     5 using namespace std;
     6 int n;
     7 int prime(int m)//判断是否为素数数
     8 {
     9     int k,i;
    10     k=sqrt(m);
    11     for(i=2;i<=k;i++)
    12     {
    13         if(m%i==0)
    14             break;
    15     }
    16     if(i==k+1)
    17         return 1;
    18     return 0;
    19 
    20 }
    21 void judge(int primer,int pos)//primer是质数,pos是位数
    22 {
    23     if(pos==1)
    24     {
    25         judge(2,2);
    26         judge(3,2);
    27         judge(5,2);
    28         judge(7,2);//当只有一位的时候
    29     }
    30     else
    31     {
    32         for(int i=1;i<=9;i++)
    33         {
    34             if(prime(primer*10+i)==1)//构造位数为pos+1的数
    35             {
    36                 if(pos==n)
    37                     printf("%d
    ",primer*10+i);//如果位数等于所给的位数
    38                 else
    39                 {
    40                     judge(primer*10+i,pos+1);//否则,位数+1,继续递归下去;
    41                 }
    42             }
    43         }
    44     }
    45 }
    46 int main()
    47 {
    48     while(~scanf("%d",&n))
    49     {
    50         if(n==1)
    51         {
    52             printf("2
    3
    5
    7
    ");//当位数为1的时候直接输出
    53         }
    54         else
    55         {
    56             judge(0,1);//否则进入judge,从位数pos=1开始找
    57         }
    58     }
    59     return 0;
    60 }



  • 相关阅读:
    C#中using的使用-以FileStream写入文件为例
    C#中FileStream的对比以及使用方法
    DevExpress的TextEdit、RadioGroup、ColorPickEdit设置默认值
    DevExpress的TextEdit限制输入内容的格式,比如只能输入数字
    CS中委托与事件的使用-以Winform中跨窗体传值为例
    Winforn中怎样在窗体中打开另一个窗体
    Winforn中实现ZedGraph自定义添加右键菜单项(附源码下载)
    Winform中实现ZedGraph的多条Y轴(附源码下载)
    《深入理解Java虚拟机》内存分配策略
    三十而立
  • 原文地址:https://www.cnblogs.com/LLLAIH/p/9723161.html
Copyright © 2011-2022 走看看