nyist 488 素数环

http://acm.nyist.net/JudgeOnline/problem.php?pid=488

 

描述

有一个整数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
来源
hdu改编
上传者
丁国强

 

解法1:生成测试法(TLE)

#define RUN
#ifdef RUN

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <assert.h>  
#include <string>  
#include <iostream>  
#include <sstream>  
#include <map>  
#include <set>  
#include <vector>  
#include <list>  
#include <cctype>   
#include <algorithm>  
#include <utility>  
#include <math.h>  
#include <ctime>  

using namespace std;

int is_prime(int x) {
  for(int i = 2; i*i <= x; i++)
    if(x % i == 0) return 0;
  return 1;
}

int main() {

#ifndef ONLINE_JUDGE
	freopen("nyist488.in", "r", stdin);
	freopen("out.out", "w", stdout); 
#endif

  int n, A[50], isp[50];
  //scanf("%d", &n);
  int cases = 1;

  while(cin>>n && n!=0){

	  bool noAnswer = true;
	  cout << "Case " << cases << ":" << endl;
	  cases++;

	  //生成素数表,加快后面的判断
	  //判断第i个数是否是素数,如果isp[i]返回1则是,返回0则否
	  for(int i = 2; i <= n*2; i++) isp[i] = is_prime(i);

	  //A[0]:1
	  //A[1]:2
	  //A[2]:3
	  //...
	  for(int i = 0; i < n; i++) A[i] = i+1;

	  do {
		  int ok = 1;
		  for(int i = 0; i < n; i++) {
			  //如果相邻两数之和不是素数
			  if(!isp[A[i]+A[(i+1)%n]]) {
				  ok = 0;
				  break;
			  }
		  }

		  if(ok) {
			  noAnswer = false;
			  for(int i = 0; i < n; i++) printf("%d ", A[i]);
			  printf("\n");
		  }

	  }while(next_permutation(A+1, A+n));

	  if(noAnswer){
		  cout << "No Answer" << endl;
	  }
  }


  return 0;
}

#endif

 

 

 

解法2:回溯法+剪枝

同时注意自环的判断

 

#define RUN
#ifdef RUN

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <assert.h>  
#include <string>  
#include <iostream>  
#include <sstream>  
#include <map>  
#include <set>  
#include <vector>  
#include <list>  
#include <cctype>   
#include <algorithm>  
#include <utility>  
#include <math.h>  
#include <ctime>  
using namespace std;

bool noAnswer;
int cases = 1;
#define MAXN 10000

int is_prime(int x) {
  for(int i = 2; i*i <= x; i++)
    if(x % i == 0) return 0;
  return 1;
}

int n, A[MAXN],	// A数组用于保存结果 A[x]=y 第x个位置放了大小为y的数
	isp[MAXN],	// isp数组用于判断是否素数 isp[x]=y 大小为x的数,其素数属性为y
	vis[MAXN];	// vis数组用于标示第i个数是否已经被使用过了 vis[x]=y,大小为x的数,已使用性为y

void dfs(int cur) {

  //递归边界,同时测试第一个数和最后一个数
  if(cur == n && isp[A[0]+A[n-1]]) {
	  noAnswer = false;
	  for(int i = 0; i < n; i++) printf("%d ", A[i]);
      printf("\n");
  }
  else {
	  for(int i = 2; i <= n; i++){
		  if(!vis[i] && isp[i+A[cur-1]]) {
			  A[cur] = i;	//标志把数i放在cur的位置上
			  vis[i] = 1;	//标志i已经用了
			  dfs(cur+1);	//寻找下一个位置应该放的数
			  vis[i] = 0;	//还原全局变量,清除标志
		  }
	  }
  }

}


int main() {

#ifndef ONLINE_JUDGE
	freopen("nyist488.in", "r", stdin);
	freopen("out.out", "w", stdout); 
#endif

	//生成素数表,加快后面的判断
	//判断第i个数是否是素数,如果isp[i]返回1则是,返回0则否
	memset(isp, 0, sizeof(isp));
	//isp[2] = isp[3] = isp[5] = isp[7] = isp[11] = isp[13] = isp[17] = isp[19] = isp[23] = isp[29] = isp[31] = isp[37] = 1;
	for(int i = 2; i <= 20*2; i++){
		isp[i] = is_prime(i);
	}

	A[0] = 1;

	while(scanf("%d",&n) && n!=0){

		noAnswer = true;
		cout << "Case " << cases << ":" << endl;
		cases++;

		memset(vis, 0, sizeof(vis));

		//自环的情况
		if(n==1) { printf("%d\n",A[0]); continue;}            

		//重要的剪枝!!!
		//如果n为奇数,存在不等于2的偶数,不为素数,可以直接排除
		// 奇+偶=奇
		// 奇+奇=偶
		// 偶+偶=偶
		if(n%2 != 0) { printf("No Answer\n"); continue;}        

		dfs(1);
		if(noAnswer){
			cout << "No Answer" << endl;
		}
	}


  return 0;
}

#endif

 

 

 

 

SXU—软件测试方法和技术-朱少民-第三部分 软件测试方法大题汇总-附考点和相关习题及解答 软件测试方法和技术-朱少民-第三部分 软件测试方法—-最少测试用例个数,强一般弱一般强健壮、边界值分析、ns流程图、白盒逻辑覆盖代码、等价类划分,逻辑组合(条件)覆盖,计算圈复杂度等—附考点和相关习题及解答 阅读详情

相关推荐

基于STM32的智能垃圾分类机器人

垃圾分类是城市管理的重要环节,传统人工分拣效率低、成本高。本文设计了一款基于STM32的智能垃圾分类机器人,通过视觉识别与机械臂协同作业,实现垃圾自动分类与投放,适用于社区、公共场所等场景,可显著提升垃圾分类效率。:STM32H743(480MHz Cortex-M7,支持AI加速)本系统实现了垃圾分拣的自动化,显著提升了分类效率。OV5640摄像头(500万像素,支持JPEG输出)支持4类垃圾识别(可回收/厨余/有害/其他)问题讨论,stm32的资料领取可以私信!超声波避障(探测距离0.1-4m)

stm32d1219的博客 1820

NYOJ 488 素数环

素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。 为了简便起见,我们规定每个素数环都从1开始。例如,下图就是6的一个素数环。 输入有多组测试数据,每组输入一个n(0 输出每组第一行输出对应的Case序号

479

MCU中GPIO口的驱动方式

MCU中GPIO口的驱动方式 导读: MCU芯片中GPIO口的驱动方式大的可分为输出和输入两类,小的分可以分为8种。 一、四种输入方式 ①上拉输入: 上拉输入抗干扰能力强,特别适合接地信号的输入(比如低电平有效的按键信号输入)。其工作原理如图1所示。 I/O 端口与TTL 施密特触发器之前接入了一个30K~50K 欧姆的上拉电阻,当I/O 端口悬空时,此时MCU 也能读到稳定的高电平状态,...

优快云Frewen的博客 3372

【南阳 oj】488--素数环(DFS)

点击打开链接 素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。 为了简便起见,我们规定每个素数环都从1开始。例如,下图就是6的一个素数环。 输入有多组测试数据,每组输入一个n(0

lycoris的博客 440

StarWind V2V Converter v9 虚拟磁盘转换工具使用教程 (转)

StarWind V2V Converter v9.0.1.268 是一款免费的虚拟磁盘转换工具,支持不同管理程序间的虚拟机镜像格式转换,包括VMDK、VHD/VHDX、IMG和QCOW2等格式。该工具具有窗口修复模式、零拷贝转换和管理程序切换等特色功能,能够轻松实现物理机到虚拟机的转换,并兼容主流管理程序如Hyper-V、ESXi等。使用教程详细介绍了从本地文件选择到格式转换的完整操作流程,转换过程简单高效且不影响原虚拟磁盘数据。

hsh的专栏 1480

STM32F030F4P6实战:LL库+DMA驱动WS2812全流程(附避坑指南)

本文详细介绍了如何使用STM32F030F4P6的LL库和DMA驱动WS2812 LED灯带的全流程,包括硬件选型、CubeMX配置、LL库与DMA关键实现、数据格式转换及调试技巧。特别提供了避坑指南,帮助开发者避免常见错误,提升开发效率。

weixin_29194693的博客 484

NYOJ 488 dfs

素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。 为了简便起见,我们规定每个素数环都从1开始。例如,下图就是6的一个素数环。 输入 有多组测试数据,每组输入一个n(0 输出 每组第一行输出对应的

2660

2025年(第十一届)全国大学生统计建模大赛论文及选题分析

基于数据驱动决策:整个研究围绕给定的洪水灾害相关数据进行深入挖掘和分析,从数据清洗、特征分析、模型建立到最终预测,每一步都以数据为基础,通过对数据的有效利用来揭示洪水灾害发生的相关规律和特征,为洪水灾害的风险评估和预测提供依据,符合数据引领未来决策的理念。实际应用导向:洪水灾害是现实中严重影响人类生命财产安全和社会经济发展的重要问题,本研究旨在实现对洪水灾害的预测,其成果可直接应用于防洪减灾工作,如洪水预警、风险评估与区划等,对实际防灾减灾工作具有重要的指导意义,体现了以数据为支撑服务实际应用的特点。

qq_52590045的博客 1万+

nyoj488--素数环

素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。 为了简便起见,我们规定每个素数环都从1开始。例如,下图就是6的一个素数环。 输入有多组测试数据,每组输入一个n(0 输出每组第一行输出对应的Case序号

zhenzhen95的博客 456

基于ASP.NET+SQLServer的美妆网站的设计与实现

通过本次ASP.NET MVC美妆商城项目的开发,我们实现了一个功能完善、性能稳定的在线购物平台。该项目不仅提升了用户的购物体验,也为商家提供了一个高效的商品管理和销售渠道。未来,我们将持续优化系统功能,提升用户体验,以适应不断变化的市场需求。

毕业设计大牛哥 1498

X86/64架构中的总线 和 ARM架构中总线的理解

内部总线 /CPU总线/FSB前端总线:类似ARM架构中的AHB总线北桥? 直接和CPU连接,这条总线主要由CPU使用,用来与高速缓存、主存和北桥(或MCH)之间传送信息。 外部总线:类似ARM架构中的APB总线(外围总线)南桥?例如PCI总线、USB总线等 通过北桥与CPU连接(南桥?),是CPU与内存RAM、ROM和输入/输出设备接口之间进行通讯的通路 内存总线:内存与北桥间的总线称为内存总线 ...

a746742897的博客 1066

题目488:素数环

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=488描述有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。为了简便起见,我们规定每个素数环都从1开始。例如,下图就是6的一个素数环。 输入有多组测试数据,每组输入一个n(0<n<20),n=0表示输入结束。输出每组第一行输出对应的Case

杨林峰的笔记 519

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

nyist 488 素数环

有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。 为了简便起见,我们规定每个素数环都从1开始。例如,下图就是6的一个素数环。 这题在进行判断时,发现在大于3的素数都没有环,所以判断一下这个条件,其他的就是按照题目意思进行输出。 1 #include <stdio.h> 2 #include <strin...

weixin_30383279的博客 122

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

nyist 488 素数环(搜索+回溯)

 素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。 为了简便起见,我们规定每个素数环都从1开始。例如,下图就是6的一个素数环。 输入有多组测试数据,每组输入一个n(0 输出每组第一行输出对应的Case序号,从

Just do it ! 1997

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

hdu1016 (素数环)(深度优先搜索)另附:http://acm.nyist.net/JudgeOnline/problem.php?pid=488

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016           http://acm.nyist.net/JudgeOnline/problem.php?pid=488(1的时候形成自环) 源代码: #include #include #include using namespace std; #define N

勿在浮沙筑高台... 1902

http://acm.nyist.net/JudgeOnline/problem.php?pid=488

对于素数环,,可以先打表求出40以内素数,然后dfs,,,, 素数环 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。 为了简便起见,我们规定每个素数环都从1开始。例如,下图就是6的一个素数环。 输入 有多组测试数据,每组输

pursuit的专栏 1438

nyoj488 素数环

素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。 为了简便起见,我们规定每个素数环都从1开始。例如,下图就是6的一个素数环。 输入有多组测试数据,每组输入一个n(0 输出每组第一行输出对应的Case序号

ILYPTING的博客 740

南阳理工:素数环

素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。 为了简便起见,我们规定每个素数环都从1开始。例如,下图就是6的一个素数环。 输入 有多组测试数据,每组输入一个n(0输出 每组第一行输出对应的Case序号,从1开

YCH1035235541的专栏 938

官方题解参考与分层复现方法论:把「参考答案」变成可复现资产

本文完整复盘安全实战「官方参考与分层复现方法论」:从授权测试环境切入,围绕信息收集与漏洞验证逐层展开,最终完成漏洞验证与影响面确认。文中给出完整复现步骤与验证方法,可作为安全工程师的实战参考。

kingx3的博客 21

【FreeRTOS源码学习笔记】任务创建

【FreeRTOS源码学习笔记】任务创建

2502_90565057的博客 459

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 287

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 365

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 559

LeetCode 1861. 旋转盒子|Go 双指针解法

j >= 0,如果写成j>0,会漏掉第 0 列,最左侧石头处理失败旋转矩阵行列互换:原 m 行 n 列 → 结果 n 行 m 列,make 数组长度不要写反旋转公式m-1-i:是原总行数 m,不是 n!很容易写成n-1-i区分:本题和轮转数组(189)分组循环不一样!189:所有元素固定移动 k 步,需要 gcd 分组1861:障碍物分割成多个独立段,石头向段末尾挤,用双指针更合适。

2503_92676540的博客 175
上一篇: ACM进阶计划
下一篇: UVA 524 - Prime Ring Problem
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值