nyoj-488 素数环 +nyoj -32 组合数 (搜索)
素数环
时间限制: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;}
}
组合数
- 描述
-
找出从自然数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 组合数 (搜索)相关推荐
- 素数环问题---深度搜索遍历
1264: 素数环 时间限制: 1 Sec 内存限制: 128 MB 提交: 29 解决: 8 [提交][状态][讨论版] 题目描述 有一个长度为n的环形序列由1,2,3,...,n组成,环中相邻 ...
- 质数环问题c语言,素数环问题
问题描述:将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环. n=20时,下面的序列就是一个素数环: 1 2 3 4 7 6 5 8 9 10 13 ...
- 素数环问题 DFS
素数环问题 将从1到n这n个整数围成一个圆环, 若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环. 现要求输入一个n,求n个数围成一圈有多少种素数环, 规定第一个数字是1.写出相应的 ...
- java编程实现素数环_回溯法解决素数环
#include #include using namespace std;#define N 100000int isp[2 * N];int a[N];int visited[N];int is_ ...
- java编程实现素数环_素数环问题(Java)
问题描述:将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环. 分析:用回溯算法,考察所有可能的排列.然后通过剪枝(题目中的条件)筛选出可能的排列将其 ...
- 素数环 与 算法 全排列
在说起全排列前,先说一下昨天碰到的一个题目(答案不是我做出来的,但是我感觉有好多个亮点,贴出来方便日后的学习): 素数环 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 ...
- 编程解决素数环问题Java_回溯法解决素数环问题java实现
素数环问题: 输入正整数n,把整数1,2,3--,n组成一个环,使得相邻两个整数之和均为素数,输出所有方案,注意同一个环应恰好输出一次.n<==16 样例输入: 6 样例输出: 1 4 3 2 ...
- 美丽的项链(素数环)(回溯法)
题目描述 520马上就要到了,丁丁妹在思考送自己的室友什么礼物能够彰显她深深的室友之爱. 由于丁丁妹最近沉迷于数学,于是她想出了一个绝(土)妙(味)的礼物--素数项链. 具体而言,素数项链是一个由1~ ...
- 素数环问题(回溯法)
素数环是一个计算机程序问题,指的是将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环. 现在要求输入一个n,求n个数围成一圈有多少种素数环,规定第一个 ...
- NYOJ 32 组合数
描述 找出从自然数1.2.- .n(0 输出 按特定顺序输出所有组合. 特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列. 样例输入 5 3 样例输出 543 542 541 5 ...
最新文章
- mysql学习一:DB、DBMS、SQL之间的联系
- acs880变频器选型手册_据说这是变频器知识里讲的最全的了,小编拿来分享给大家!...
- #1413 : Rikka with String 后缀自动机 + 二级差分
- java爬取网页内容 简单例子(2)——附jsoup的select用法详解
- python isinstance函数
- [设计模式]设计模式之禅关于迪米特法则
- java bufferedwriter 写入tab_Java基础-IO流
- 机电传动控制 第一周作业
- jupyter调用py文件_解决Jupyter notebook中.py与.ipynb文件的import问题
- sqluldr2 用法简述
- 如何使用python合并多个excel文件
- js中ajax提交表单提交表单提交,JS中ajax请求提交form表单
- mov转换成mp4,mov转mp4方法
- python 索引方法loc和iloc
- JZOJ4722. 跳楼机
- 程序复杂度之圈复杂度
- 程序员面试题精选(24):栈的push、pop序列
- jmeter beanshell关于小数参数定义转化
- 少年宫计算机室管理制度,少年宫计算机室活动计划](4页)-原创力文档
- 手工选出的股票池和量化选股模型选出的股票池有哪些区别?
热门文章
- Android NDK开发之 Neon优化
- python自动化面试提问_Python自动化测试笔试面试题精选
- python装饰器是什么意思_对Python装饰器的理解
- python内置函数open_Python学习教程:Python内置函数大总结(下篇)
- 蓝牙学习笔记(二)——低功耗蓝牙(BLE)的体系结构
- C语言:编写函数,通过一个指针将一个字符串反向
- c/c++_消除非标准警告
- Spring多个版本源码地址分享
- 自动化测试基础篇--Selenium发送测试报告邮件
- 《Nmap渗透测试指南》—第2章2.8节ICMP Ping Types扫描