• HUAS Summer Trainning #3~C


    Description

    Download as PDF
     

    A ring is composed of n (even number) circles as shown in diagram. Put natural numbers $1, 2, dots, n$ into each circle separately, and the sum of numbers in two adjacent circles should be a prime.


    Note: the number of first circle should always be 1.

    Input 

    n (0 < n <= 16)

    Output 

    The output format is shown as sample below. Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely. The order of numbers must satisfy the above requirements.


    You are to write a program that completes above process.

    Sample Input 

    6
    8
    

    Sample Output 

    Case 1:
    1 4 3 2 5 6
    1 6 5 2 3 4
    
    Case 2:
    1 2 3 8 5 6 7 4
    1 2 5 8 3 4 7 6
    1 4 7 6 5 8 3 2
    1 6 7 4 3 8 5 2
    

     解题思路:这个题目的意思是输入一个偶数将其组成一个环,使得相邻两个整数之和均为素数。输出时从整数1开始逆时针排列。同一个环应恰好输出一次。这个问题使用回溯法是很好的解题方法,还需注意的是最后一个数和第一个数之和也要为素数。并且这种没有限制条件停止的一般都要在输入数字时判断是否输入错误(!=EOF)

    程序代码:

    #include <cstdio> 
    int n,A[18],vis[18],i;
    int isp(int num)

     for(i=2;i*i<=num;i++) 
     {
      if(num%i==0)
       return 0;
     }
     return 1;

    void dfs(int cur)
    {
     if(n==cur&&isp(A[1]+A[n]))//递归边界,别忘了测试第一个数和最后一个数
     {
      for(i=1;i<n;i++)
       printf("%d ",A[i]);
      printf("%d ",A[n]);//打印方案
     }
      for(int i=2;i<=n;i++)//尝试放置每个标志i
      {
      if(!vis[i]&&isp(i+A[cur]))//如果i没有用过,;并且与前一个数之和为素数
      {
       vis[i]=1;//设置使用标志
       A[cur+1]=i;
       dfs(cur+1);
       vis[i]=0;//清楚标志
      }
      }
    }

    int main()
    {
     int t=0;
     while(scanf("%d",&n)!=EOF)
     {
      A[1]=1;
      if(t!=0)
       printf(" ");
      t++;
      printf("Case %d: ",t);
      dfs(1);
     }
     return 0;

    }

  • 相关阅读:
    curl命令使用
    eclipse安装maven3
    【转】轻松搞定面试中的二叉树题目
    【转】轻松搞定面试中的链表题目
    CPP_运算符重载及友元
    CPP_template
    CPP基础
    CPP_封装_继承_多态
    CPP_类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数
    CPP_const&static
  • 原文地址:https://www.cnblogs.com/chenchunhui/p/4693061.html
Copyright © 2020-2023  润新知