zoukankan      html  css  js  c++  java
  • 「UVA524」 Prime Ring Problem 质数环

    Description


    输入正整数n,把整数1,2,…,n组成一个环,使得相邻两个整数之和均为素数。输出时,从整数1开始逆时针排列。同一个环恰好输出一次。n<=16.

    A ring is composed of n (even number) circles as shown in diagram.
    Put natural numbers1,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<=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

    题解


    n<=16,数据很小,可以暴搜,途中用stack记录经历的点

    这道题的难点是输出格式啊QAQ!!!

    example:

    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//这里也没有空格
    //这里有回车

    //luogu的原题中输出格式是崩坏的啊!!!QAQ

    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    int n;
    bool sf[21];
    int stack[21];
    int flag;
    bool prime(int x)
    {
        for(int i=2;i<=sqrt(x);++i)
        if(x%i==0)return 0;
        return 1;
    }
    int tot=0;
    void print()
    {
        if(!prime(1+stack[n]))return;
        if(!flag){
            if(tot)cout<<endl;
            flag++;
            printf("Case %d:",++tot);
        }
        cout<<endl;
        cout<<1;
        for(int i=2;i<=n;++i)
        cout<<" "<<stack[i];
    }
    void search(int x)
    {
        for(int i=2;i<=n;++i)
        if(!sf[i]&&prime(stack[x-1]+i))
        {
            stack[x]=i;
            sf[i]=1;
            if(x==n)print();
            else search(x+1);
            sf[i]=0;
        }
        return;
    }
    int main()
    {
        while(cin>>n)
        {
        memset(sf,0,sizeof(sf));
        flag=0;
        stack[1]=1;
        sf[1]=1;
        search(2);
        cout<<endl;
        }
    }
  • 相关阅读:
    快速构建一个权限项目(七)
    快速构建一个权限项目(六)
    快速构建一个权限项目(五)
    快速构建一个权限项目(四)
    快速构建一个权限项目(三)
    快速构建一个权限项目(二)
    快速构建一个权限项目(一)
    MySql快速入门(四)
    Mysql快速入门(三)
    Mysql快速入门(二)
  • 原文地址:https://www.cnblogs.com/qwerta/p/9379747.html
Copyright © 2011-2022 走看看