【B001】Hi,大家好,今天我的博客第一天开通,今天奉上开博题,出自首都师师范大学附属中学OJ(题号未知在练习场中)原题为UVa524,题目要求如下:

【难度B】————————————————————————————————————————————————————————————————————————————————————————————

【题目要求】输入正整数n,用整数1,2,3,……,n 的某种排列组成一个环,使任意相邻的两数和均为素数。输出时从整数1开始逆时针排列,同一个环恰好输出一次。 有多种可能的排列,输出时按照字典序小的排列先输出的原则。

【输入要求】一个正整数n

【输入示例】

6

【输出实例】

2
1 4 3 2 5 6
1 6 5 2 3 4

【其他要求】数据范围:n〈=16

【试题分析】各位读者首先想到的是暴搜但当n为12时就已经慢得要命,此题必用回溯法(有点像dfs深搜)。

【代码】

#include <cstdio>
#include <cstring> int A[20], vis[20];
int n;
int t=0; int is_prime(int n)//判断质数
{
for(int i = 2; i*i <= n; i++)
if(n % i == 0) return 0;
return 1;
} void js(int xx)
{ if(xx == n && is_prime(A[0]+A[n-1]))
{
t++; } for(int i = 2; i <= n; i++)//尝试每一个数
if(vis[i] == 0 && is_prime(i+A[xx-1]))//判断是否和为质数
{
A[xx] = i;
vis[i] = 1;
js(xx+1);
vis[i] = 0;//清除标记
} }
void dfs(int cur)
{ if(cur == n && is_prime(A[0]+A[n-1]))
{
t++; } if(cur == n && is_prime(A[0]+A[n-1]))
{ for(int i = 0; i < n; i++)
{
printf("%d", A[i]);//打印方案
printf("%s", i == n-1 ? "\n" : " ");
}
return;
}
for(int i = 2; i <= n; i++)//尝试每一个数
if(vis[i] == 0 && is_prime(i+A[cur-1]))//判断是否和为质数
{
A[cur] = i;
vis[i] = 1;
dfs(cur+1);
vis[i] = 0;//清除标记
} } int main()//调用
{
#ifdef LOCAL #endif
int kase = 0;
while(scanf("%d", &n) != EOF)
{
memset(vis, 0, sizeof(vis));
A[0] = 1;
vis[1] = 1;
js(1);
printf("%d\n", t);
dfs(1);
}
return 0;
}

【注】此代码以AC稍有累赘,请各位读者多多指教(话说我一直粗心没看见示例中的2结果WA了4次)

本BLOG简介(内有一道UVa524素数环进阶版)【B001】的更多相关文章

  1. Django---图书管理系统,一对多(外键设置),__str__和__repr__的区别,进阶版项目说明简介.模版语言if ... else ..endif

    Django---图书管理系统,一对多(外键设置),__str__和__repr__的区别,进阶版项目说明简介.模版语言if ... else ..endif 一丶__str__ 和 __repr__ ...

  2. 素数环问题[XDU1010]

    Problem 1010 - 素数环问题 Time Limit: 1000MS   Memory Limit: 65536KB   Difficulty: Total Submit: 972  Acc ...

  3. Prime Ring Problem + nyoj 素数环 + Oil Deposits + Red and Black

    Prime Ring Problem Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) ...

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

     素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 有一个整数n,把从1到n的数字无反复的排列成环,且使每相邻两个数(包含首尾)的和都为素数,称为素数环. ...

  5. Hdu 1016 Prime Ring Problem (素数环经典dfs)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  6. 【DFS】素数环问题

    题目: 输入正整数n,对1-n进行排列,使得相邻两个数之和均为素数,输出时从整数1开始,逆时针排列.同一个环应恰好输出一次.n<=16 如输入: 6 输出: 1 4 3 2 5 6 1 6 5 ...

  7. HDU 1016 Prime Ring Problem(素数环问题)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Jav ...

  8. 素数环 南阳acm488(回溯法)

    素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环. 为了简 ...

  9. UVA 524 素数环 【dfs/回溯法】

    Description   A ring is composed of n (even number) circles as shown in diagram. Put natural numbers ...

随机推荐

  1. struts2响应AJAX

    1发送ajax请求使用stream进行响应 Result的type属性的stream取值. 1.1定义Action public class UserAction { private String u ...

  2. 第K 小数

    [问题描述]有两个正整数数列,元素个数分别为N和M.从两个数列中分别任取一个数相乘,这样一共可以得到N*M个数,询问这N*M个数中第K小数是多少.[输入格式]输入文件名为number.in.输入文件包 ...

  3. Eclipse的使用及Java程序的标识符和关键字

    Eclipse的使用 (1)创建Java项目 选择“文件”/“新建”/“Java项目”命令,在弹出的“新建Java项目”对话框输入项目名,然后点击“下一步”,最后单击“完成”. (2)创建Java类文 ...

  4. MVC基础知识 – 2.新语法

    1.自动属性 Auto-Implemented Properties 2.隐式类型 var 3.参数默认值 和 命名参数 4.对象初始化器 与 集合初始化器 { } 5.匿名类 & 匿名方法 ...

  5. HDU4288 Coder(线段树)

    注意添加到集合中的数是升序的,先将数据读入,再离散化. sum[rt][i]表示此节点的区域位置对5取模为i的数的和,删除一个数则右边的数循环左移一位,添加一个数则右边数循环右移一位,相当于循环左移4 ...

  6. 攻城狮在路上(叁)Linux(十一)--- 用户与用户组、文件权限、目录配置

    一.用户与用户组: 3个概念:文件所有者(user).用户组(group).其他人(others). /etc/passwd  <==存放所有的用户名 /etc/shadow  <==存放 ...

  7. 用CocoaPods做iOS程序的依赖管理(转摘)

    转摘自:http://blog.devtang.com/blog/2014/05/25/use-cocoapod-to-manage-ios-lib-dependency/ 文档更新说明 2012-1 ...

  8. go sample - format

    go sample - format package mainimport "fmt"import "os"type point struct { x, y i ...

  9. 继续Get News List

    拿到news list 所需要的技能 json数组反序列化 iOS中有哪些集合对象 数组的遍历 Debugging with GDB json数组反序列化 id jsonObject = [NSJSO ...

  10. html5 svg 圆形进度条

    html5 svg 圆形进度条 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...