• 杭电 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;
    }
    



  • 相关阅读:
    织梦安装
    讲解版的自动轮播(新手福利)样式和js就不分离了为了看的方便
    APP制作过程
    细线边框
    APP常用模块
    PC-JS小技巧
    PC-CSS-多浏览器支持HTML5
    jQuery瀑布流实例无限滚动加载图片
    25个Java机器学习工具&库(收藏)
    java中的动态代理----自己手动实现
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7102783.html
Copyright © 2020-2023  润新知