素数环

时间限制:1000 ms  |  内存限制:65535 KB

难度:2

描述 
有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。

为了简便起见,我们规定每个素数环都从1开始。例如,下图就是6的一个素数环。


输入有多组测试数据,每组输入一个n(0<n<20),n=0表示输入结束。输出每组第一行输出对应的Case序号,从1开始。
 如果存在满足题意叙述的素数环,从小到大输出。

否则输出No Answer。

样例输入

6

8
3
0

样例输出

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
Case 3:

No Answer

dfs

#include<map>
#include<set>
#include<queue>
#include<math.h>
#include<vector>
#include<string>
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#define inf 0x3f3f3f
#define ll long long
#define maxn 13005
using namespace std;
int n;
int a[maxn];
int b[maxn];
int vis[maxn];
int flag;
queue<int>q;
void dfs(int y)
{if(y==n){b[0]=1;b[n]=1;for(int i=0; i<n; i++){if(a[b[i]+b[i+1]]!=0)return ;}printf("1");for(int i=1; i<n; i++)printf(" %d",b[i]);cout<<endl;flag=1;return ;}for(int i=2; i<=n; i++){if(vis[i]==0&&a[b[y-1]+i]==0){vis[i]=1;b[y]=i;dfs(y+1);vis[i]=0;}}return ;
}
int main()
{a[0]=1;a[1]=1;for(int i=2; i<50; i++){if(a[i]==0){for(int j=2*i; j<100; j+=i)a[j]=1;}}int t=0;while(~scanf("%d",&n)&&n){memset(vis,0,sizeof(vis));memset(b,0,sizeof(b));flag=0;b[0]=1;b[n]=1;t++;printf("Case %d:\n",t);if(n==1){cout<<1<<endl;continue;}if(n%2==1){cout<<"No Answer"<<endl;continue;}dfs(1);if(flag==0)cout<<"No Answer"<<endl;}
}

组合数

时间限制:3000 ms  |  内存限制:65535 KB
难度:3

描述
找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。

输入
输入n、r。
输出
按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
样例输入
5 3
样例输出
543
542
541
532
531
521
432
431
421
321
#include<map>
#include<set>
#include<queue>
#include<math.h>
#include<vector>
#include<string>
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#define inf 0x3f3f3f
#define ll long long
#define maxn 50
using namespace std;
int n,r,l;
map<string,int>q;
int vis[maxn];
int b[maxn];
int a[maxn];
string s;
struct node
{string s;
} ss[maxn*maxn*maxn];
bool cmp(node op,node opp)
{return op.s>opp.s;
}
void dfs(int x)
{if(x==r){memcpy(a,b,sizeof(a));sort(a,a+r);for(int i=r-1;i>=0;i--){s+=(a[i]+'0');}if(q[s]==0){ss[l].s=s;l++;q[s]=1;}s="";return;}for(int i=1; i<=n; i++){if(vis[i]==0){vis[i]=1;b[x]=i;dfs(x+1);vis[i]=0;}}return ;
}
int main()
{while(~scanf("%d%d",&n,&r)){l=0;memset(vis,0,sizeof(vis));memset(b,0,sizeof(b));memset(a,0,sizeof(a));q.clear();dfs(0);sort(ss,ss+l,cmp);for(int i=0; i<l; i++)cout<<ss[i].s<<endl;}
}

wokenengshigeshazi

转载于:https://www.cnblogs.com/da-mei/p/9053277.html

nyoj-488 素数环 +nyoj -32 组合数 (搜索)相关推荐

  1. 素数环问题---深度搜索遍历

    1264: 素数环 时间限制: 1 Sec  内存限制: 128 MB 提交: 29  解决: 8 [提交][状态][讨论版] 题目描述 有一个长度为n的环形序列由1,2,3,...,n组成,环中相邻 ...

  2. 质数环问题c语言,素数环问题

    问题描述:将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环. n=20时,下面的序列就是一个素数环: 1 2 3 4 7 6 5 8 9 10 13 ...

  3. 素数环问题 DFS

    素数环问题 将从1到n这n个整数围成一个圆环, 若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环. 现要求输入一个n,求n个数围成一圈有多少种素数环, 规定第一个数字是1.写出相应的 ...

  4. java编程实现素数环_回溯法解决素数环

    #include #include using namespace std;#define N 100000int isp[2 * N];int a[N];int visited[N];int is_ ...

  5. java编程实现素数环_素数环问题(Java)

    问题描述:将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环. 分析:用回溯算法,考察所有可能的排列.然后通过剪枝(题目中的条件)筛选出可能的排列将其 ...

  6. 素数环 与 算法 全排列

    在说起全排列前,先说一下昨天碰到的一个题目(答案不是我做出来的,但是我感觉有好多个亮点,贴出来方便日后的学习): 素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 ...

  7. 编程解决素数环问题Java_回溯法解决素数环问题java实现

    素数环问题: 输入正整数n,把整数1,2,3--,n组成一个环,使得相邻两个整数之和均为素数,输出所有方案,注意同一个环应恰好输出一次.n<==16 样例输入: 6 样例输出: 1 4 3 2  ...

  8. 美丽的项链(素数环)(回溯法)

    题目描述 520马上就要到了,丁丁妹在思考送自己的室友什么礼物能够彰显她深深的室友之爱. 由于丁丁妹最近沉迷于数学,于是她想出了一个绝(土)妙(味)的礼物--素数项链. 具体而言,素数项链是一个由1~ ...

  9. 素数环问题(回溯法)

    素数环是一个计算机程序问题,指的是将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环. 现在要求输入一个n,求n个数围成一圈有多少种素数环,规定第一个 ...

  10. NYOJ 32 组合数

    描述 找出从自然数1.2.- .n(0 输出 按特定顺序输出所有组合.  特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列. 样例输入 5 3 样例输出 543  542  541  5 ...

最新文章

  1. mysql学习一:DB、DBMS、SQL之间的联系
  2. acs880变频器选型手册_据说这是变频器知识里讲的最全的了,小编拿来分享给大家!...
  3. #1413 : Rikka with String 后缀自动机 + 二级差分
  4. java爬取网页内容 简单例子(2)——附jsoup的select用法详解
  5. python isinstance函数
  6. [设计模式]设计模式之禅关于迪米特法则
  7. java bufferedwriter 写入tab_Java基础-IO流
  8. 机电传动控制 第一周作业
  9. jupyter调用py文件_解决Jupyter notebook中.py与.ipynb文件的import问题
  10. sqluldr2 用法简述
  11. 如何使用python合并多个excel文件
  12. js中ajax提交表单提交表单提交,JS中ajax请求提交form表单
  13. mov转换成mp4,mov转mp4方法
  14. python 索引方法loc和iloc
  15. JZOJ4722. 跳楼机
  16. 程序复杂度之圈复杂度
  17. 程序员面试题精选(24):栈的push、pop序列
  18. jmeter beanshell关于小数参数定义转化
  19. 少年宫计算机室管理制度,少年宫计算机室活动计划](4页)-原创力文档
  20. 手工选出的股票池和量化选股模型选出的股票池有哪些区别?

热门文章

  1. Android NDK开发之 Neon优化
  2. python自动化面试提问_Python自动化测试笔试面试题精选
  3. python装饰器是什么意思_对Python装饰器的理解
  4. python内置函数open_Python学习教程:Python内置函数大总结(下篇)
  5. 蓝牙学习笔记(二)——低功耗蓝牙(BLE)的体系结构
  6. C语言:编写函数,通过一个指针将一个字符串反向
  7. c/c++_消除非标准警告
  8. Spring多个版本源码地址分享
  9. 自动化测试基础篇--Selenium发送测试报告邮件
  10. 《Nmap渗透测试指南》—第2章2.8节ICMP Ping Types扫描