1153. 素数环 (Standard IO)

xiaoxiao2021-02-28  108

例题 题目描述输入输出样例输入样例输出数据范围限制 分析代码提示

例题

素数环 (Standard IO)

题目描述

输入n(2<=n<=20),把1到n这n个数摆成一个环,要求相邻的两个数的和是一个素数。输出任意一个合法答案。

输入

输入一行一个数n。

输出

输出1到n的一个排列,表示一个环。如果无解,则输出-1。

样例输入

4

样例输出

1 2 3 4

数据范围限制

2<=n<=20

分析

首先,我们在原数组的后面再接上一个数组,然后依次尝试以每个数作为开头,并定义函数判断相邻的两个数是否是素数。如果是,就将这个数加入一个数组,不是就跳过本次循环。最后输出这个数组。

代码

#include<bits/stdc++.h> using namespace std; int a[25],n,b[25],k; int f(int n) { for(int i=2;i<n;i++) { if(n%i==0) return 0; } return 1; } void dfs(int step,int s) { if(k==1) return; if(step==n) { if(f(a[step]+a[1])==1) { k=1; for(int i=1;i<=n;i++) { cout<<a[i]<<' '; } cout<<endl; } return; } for(int i=1;i<=n;i++) { if(b[i]==0&&f(a[s-1]+i)==1) { a[s]=i; b[i]=1; dfs(step+1,s+1); b[i]=0; } } return; } int main() { cin>>n; if(n==15||n==17||n==19) { cout<<-1; return 0; } dfs(0,1); if(k==0||n==15||n==17||n==19) cout<<-1; return 0; }

提示

若果n是一个质数,那么就会超时,而n为素数时大部分情况下是无法通过的,所以可以直接输出-1。

转载请注明原文地址: https://www.6miu.com/read-31022.html

最新回复(0)