zoukankan      html  css  js  c++  java
  • 杭电 1016 Prime Ring Problem

    Prime Ring Problem

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 23929    Accepted Submission(s): 10681


    Problem Description
    A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., 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 < 20).
     

    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. Print solutions in lexicographical order.

    You are to write a program that completes above process.

    Print a blank line after each case.
     

    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


    AC代码例如以下:


    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    
    
    int p[60]={0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,
            0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1};
    
    void print_p(int n,int* a,int cur)
    {
        int i,j;
        if(cur==n&&p[a[0]+a[n-1]])
        {
            for(i=0;i<n;i++)
        if(i==0)
            printf("%d",a[i]);
        else
            printf(" %d",a[i]);
        printf("
    ");
        }
        else
        {
            for(i=2;i<=n;i++)
            {
                int ok=1;
                a[cur]=i;
                for(j=0;j<cur;j++)
                    if(a[j]==i)
                {
                    ok=0;
                    break;
                }
                if(ok&&p[a[cur-1]+a[cur]])
                    print_p(n,a,cur+1);
    
            }
        }
    }
    
    int main()
    {
        int n,cont=0;
        while(~scanf("%d",&n))
        {
            int a[30]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
            cont++;
            printf("Case %d:
    ",cont);
            print_p(n,a,1);
            printf("
    ");
        }
        return 0;
    }
    



  • 相关阅读:
    docker使用
    解决wps linux中文字体名字全是英文
    解决小程序云函数操作数据库回调不执行
    解决XP“不是有效Win32程序” 不是改Platform toolset
    [hdu1686] Oulipo【KMP】
    [poj 2104] K-th Number【主席树】
    bzoj2806 [Apio2012]dispatching【可并堆】
    bzoj1492 [NOI2007]货币兑换Cash【cdq分治】
    [coci2015-2016 coii] torrent【树形dp 二分】
    [coci2015-2016 coii] Palinilap【字符串 哈希】
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7102783.html
Copyright © 2011-2022 走看看