zoukankan      html  css  js  c++  java
  • Prime ring problem,递归,广搜,回溯法枚举,很好的题

    题目描述:

    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.

    样例输入:
    6
    8
    
    样例输出:
    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
    
    提示:

    用printf打印输出。

    #include<iostream>
    #include<stdio.h>
    #include<queue>
    using namespace std;
    
    int ans[17];
    bool mark[17];
    bool check(int a){
        
        if ((a%2 == 0||a%3==0||a%5==0)&&a!=2&&a!=3&&a!=5)//因为输入的n<17,所以相邻数字加和小于32,合数的因子就235
        return false;
        return true;
    } int n; void dfs(int cnt){ if (cnt>1 ) if (check(ans[cnt-1]+ans[cnt-2])==false) return; if (cnt==n) if (check(ans[cnt-1]+ans[0])==false) return; if (cnt == n){ printf("1"); for (int i=1;i<n;i++){ printf(" %d",ans[i]); } printf(" "); } for (int i=2;i<=n;i++){ if (mark[i]==false){ mark[i]=true; ans[cnt]=i; //cnt++; dfs(cnt+1); mark[i]=false; } } } int main (){ int c=0; while (cin>>n){ c++; for (int i=1;i<=n;i++) mark[i]=false; ans[0]=1; mark[1]=true; printf("Case %d: ",c); dfs(1); printf(" "); } return 0; }

    哎呀呀!他说我超时!!!!找了好久好久好久的bug

    后来突然想起之前学长说printf比cout快

    然后换了,ac了

    刚刚粘题目的时候发现。。提示里面有,我没看见。哭哭

    所以说啊,printf好啊,以后尽量用这个吧

    这道题也很好啊,

    标红是核心,好好看

  • 相关阅读:
    OpenStack之Fuel架构及其工作原理
    Docker容器常用命令汇总
    openstack 5大组件之间的关系和基本架构思维导图
    LeetCode刷题实战4:寻找两个正序数组的中位数
    LeetCode刷题实战3:无重复字符的最长子串
    LeetCode刷题实战2:两数相加
    LeetCode刷题实战1:两数之和
    剑指Offer 05. 替换空格
    剑指Offer 03. 数组中重复的数字
    TensorFlow2.0(4):填充与复制
  • 原文地址:https://www.cnblogs.com/yexiaoqi/p/7240717.html
Copyright © 2011-2022 走看看