• 「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;
        }
    }
  • 相关阅读:
    Lucene学习总结之七:Lucene搜索过程解析
    Lucene学习总结之六:Lucene打分公式的数学推导
    Lucene学习总结之五:Lucene段合并(merge)过程分析
    Lucene学习总结之四:Lucene索引过程分析
    Lucene学习总结之三:Lucene的索引文件格式(1)
    Lucene学习总结之二:Lucene的总体架构
    Lucene学习总结之一:全文检索的基本原理
    解决Eclipse中文乱码
    【Lucene4.8教程之五】Luke
    【Tika基础教程之一】Tika基础教程
  • 原文地址:https://www.cnblogs.com/qwerta/p/9379747.html
Copyright © 2020-2023  润新知