• 素数环——搜索与回溯


    题目描述 Description
    从1到20这20个数摆成一个环,要求相邻的两个数的和是一个素数。
     输入输出格式 Input/output
    输入格式:
    无输入
    输出格式:
    一个整数(第几号素数环),一列数字(表示这个素数环)
     输入输出样例 Sample input/output
    样例测试点#1
    输入样例:
    输出样例:
    这里就不演示了(…)
    思路:循环20次,首先判断两个数的和是否为质数,是,直接赋值,否,下一个继续。
    到末尾再判断首尾是否能相接,能的话,输出!
    代码如下(本代码来自“《算法竞赛入门经典》 第5章 搜索与回溯算法C++版 标准代码”)
     1 #include <stdio.h>
     2 #include <math.h>
     3 int a[30]={0};
     4 int b[30]={0};
     5 int zongshu=0;
     6 int k; 
     7 int zhishu(int x,int y)//判断质数函数 
     8 {
     9     int k=2,i=x+y;
    10     while(k<=sqrt(i)&&i%k!=0) k++;
    11     if(k>sqrt(i)) return 1;
    12        else return 0;
    13 }         
    14 int shuchu()//输出函数 
    15 {
    16     int i;
    17     printf("No.%d  ",zongshu++);
    18     for(i=0;i<20;i++)
    19     {
    20         printf("%d ",a[i]);
    21     }
    22     printf("
    ");
    23 }
    24 int kk(int p)
    25 {
    26     int i;
    27     for(i=1;i<=20;i++)
    28     {
    29         if((zhishu(a[p-1],i)&&(!b[i]))==1)//符合条件            
    30         {
    31              a[p]=i;
    32              b[i]=1;
    33              if(p==20) 
    34                { 
    35                     if(zhishu(a[20],a[1]))//判断首尾是否能相接,为真,输出 
    36                  {
    37                      shuchu();//是的话,输出即可 
    38                   }                                
    39               }
    40              else kk(p+1);//否则,下一个。。。 
    41              b[i]=0;//还原场景 
    42         }
    43     }   
    44 }         
    45 int main()
    46 {
    47     kk(1);
    48     printf("%d
    ",zongshu);
    49     return 0;
    50 }
  • 相关阅读:
    【20220125】连岳摘抄
    【20220127】连岳摘抄
    【20220124】心胸狭窄容易生事
    【20220201】连岳摘抄
    【20220123】连岳摘抄
    【20220130】连岳摘抄
    【一句日历】2022年2月
    【20220126】傅雷家书
    【20220128】勤奋和从容并不冲突
    深入理解JUC:第六章:Semaphore信号灯
  • 原文地址:https://www.cnblogs.com/geek-007/p/4474208.html
Copyright © 2020-2023  润新知