题目1459:Prime ring problem(素数环问题)

来源:互联网 发布:淘宝联盟怎么用 编辑:程序博客网 时间:2024/05/29 04:32
题目1459:Prime ring problem

时间限制:2 秒

内存限制:128 兆

特殊判题:

提交:823

解决:332

题目描述:

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.


输入:

n (1 < n < 17).

输出:

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.

样例输入:
68
样例输出:
Case 1:1 4 3 2 5 61 6 5 2 3 4Case 2:1 2 3 8 5 6 7 41 2 5 8 3 4 7 61 4 7 6 5 8 3 21 6 7 4 3 8 5 2
提示:

用printf打印输出。

#include<stdio.h>bool hash[22];int prime[] = {2,3,5,7,11,13,17,19,23,29,31,37,41};int ans[22];int n = 0;              bool judge(int num){        for (int i = 0; i < 13; i++) {            if(num == prime[i]) return true;        }        return false;    }    void check(){        if(judge(ans[n]+ ans[1]) == false)return;                 for (int i = 1; i <= n; i++) {            if(i!=1) printf(" ");            printf("%d",ans[i]);                     }        printf("\n");    }    void DFS(int num){        if(num > 1){            if(judge(ans[num] + ans[num-1]) == false) return;        }        if(num == n) {            check();            return;        }                 for (int i = 2; i <= n; i++) {            if(hash[i] == false){                hash[i] = true;                ans[num+1] = i;                DFS(num+1);                hash[i] = false;            }        }                      }    int main() {                 int cas = 0;        while( scanf("%d",&n) != EOF ){                     cas ++;            for (int i = 0; i < 22; i++) {                hash[i] = false;            }                         ans[1] = 1;            hash[1] = true;            printf("Case %d:\n",cas);            DFS(1);                         printf("\n");        }        return 0;    } /**************************************************************    Problem: 1459    User: yihukurama    Language: C++    Result: Accepted    Time:610 ms    Memory:1020 kb****************************************************************/


0 0
原创粉丝点击