标签:搜索与回溯

题目:

从1到20这20个数摆成一个环,要求相邻的两个数的和是一个素数。

算法分析:

非常明显,这是一道回溯的题目。从1开始,每个空位有20种可能,只要填进去的数合法:与前面的数不相同;与左边相邻的数的和是一个素数。第20个数还要判断和第1个数的和是否素数。

算法流程:

1、数据初始化;

2、递归填数:判断第i个数填入是否合法;

A、如果合法:填数;判断是否到达目标(20个已填完):是,打印结果;不是,递归填下一个;

B、如果不合法:选择下一种可能;

题解:

#include <iostream>
#include <cmath>
using namespace std; bool b[21]={0};
int a[21]={0};
int search(int);
int print();
bool pd(int,int);
int main()
{
search(1);
return 0;
}
int search(int t)
{
for (int i=1;i<=20;i++)
if(pd(a[t-1],i)&&(!b[i]))
{
a[t]=i;
b[i]=1;
if(t==20)
{
if(pd(a[20],a[1]))
print();
}
else search(t+1);
b[i]=0; }
}
int print()
{
for(int j=1;j<=20;j++)
cout<<a[j]<<' ';
cout<<endl;
}
bool pd(int x,int y)
{
int k=2;
while(k<=sqrt(x+y)&&(x+y)%k!=0)k++;
if(k>sqrt(x+y))return 1;
else return 0;
}

知识点:

  • 素数筛法
void ifprime()
{ //打表法将1到40之间所有的素数用1标记放入数组中对应位置,其余数用0标记
for(int i=2;i<40;i++)
prime[i]=1;
prime[1]=0; for(int i=2;i<40;i++)
for(int j=2*i;j<=40;j+=i)
prime[j]=0;
}
  • 素数定义法
bool pd(int x,int y)
{
int k=2;
while(k<=sqrt(x+y)&&(x+y)%k!=0)k++;
if(k>sqrt(x+y))return 1;
else return 0;
}

错解:

忘记了1到20不能重复,搜索写的也有问题

//1到20素数环
#include <iostream>
using namespace std;
int a[21];
int nas[40];
int check()
{ //素数筛
for(int i=2;i<=40;i++)nas[i]=1;
nas[1]=0;
for(int i=2;i<40;i++)
for(int j=2*i;j<40;j+=i)
{
nas[j]=0;
}
} int search(int k)
{ if(k==20)
{ for(int i=1;i<=20;i++)
if(nas[a[1]+a[20]])
for(int j=1;j<=20;j++)
cout<<a[j];
}
for(int i=1;i<=20;i++)
{
if(nas[a[k]+i])
{
a[k+1]=i;
search(k+1);
}
a[k+1]=0;
search(k);
}
}
int main()
{ check();
for(int i=1;i<=20;i++)
{
a[1]=i;
search(1);
for(int j=1;j<=20;j++)a[j]=0;
} return 0;
}

洛谷UVA524 素数环 Prime Ring Problem的更多相关文章

  1. UVA524 素数环 Prime Ring Problem

    题目OJ地址: https://www.luogu.org/problemnew/show/UVA524 hdu oj 1016:  https://vjudge.net/problem/HDU-10 ...

  2. 素数环 Primg Ring Problem

    素数环 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/C 题意: 输入正整数n,把整数1~n组成一个 ...

  3. HDU - 1016 Prime Ring Problem 经典素数环

    Prime Ring Problem A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., ...

  4. Prime Ring Problem素数环(HDU1016)

    Prime Ring Problem 思路:先看成一条链,往里头填数,满足任意相邻两数和为质数(这可以打表预处理出40以内的所有质数,扩展的时候枚举),填完了后检查首尾是否满足条件.字典序可以采用扩展 ...

  5. uva 524 prime ring problem——yhx

      Prime Ring Problem  A ring is composed of n (even number) circles as shown in diagram. Put natural ...

  6. hdu 1016 Prime Ring Problem(DFS)

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

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

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

  8. [HDU 1016]--Prime Ring Problem(回溯)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Jav ...

  9. Prime Ring Problem

    Problem Description A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ... ...

随机推荐

  1. Timeline Event

    https://forum.unity.com/threads/timeline-events.479400/

  2. Mybatis 枚举类处理

    目录 类型处理器(TypeHandler) 内置的枚举处理器 EnumTypeHandler源码 自定义枚举类处理 通用枚举处理器 Git 类型处理器(TypeHandler) 无论是 MyBatis ...

  3. P1020 导弹拦截(nlogn求最长不下降子序列)

    题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...

  4. 本地模拟 gitlab ci 的 demo 项目

    构建好的镜像能跑起来, 项目地址: https://github.com/szliugx/gitlab-ci-local 为了不每次提交,本地可以做一些模拟 gitlab ci 的测试≍,主要实现方式 ...

  5. vue 通过css实现输入框居中输入

    今天开发时突然想写blog了,水一下(o゚v゚)ノ css代码 .inputStyle { text-align: center;/*主要就是这个,下面的都是样式*/ width: 6rem; hei ...

  6. HarmonyOS面向128KB-128MB内存终端开源

    2020年9月10日,以HDC Together为主题的2020年度华为开发者大会在东莞·松山湖举办,华为带来了HarmonyOS 2.0.EMUI 11.HMS.HUAWEI HiLink.HUAW ...

  7. 本以为自己 MySQL 够牛逼了,直到亲自去阿里受虐了一次!

    前言 众所周知,简历上“了解=听过名字:熟悉=知道是啥:熟练=用过:精通=做过东西”. 相信大家对于MySQL的索引都不陌生,索引(Index)是帮助MySQL高效获取数据的数据结构.索引作为MySQ ...

  8. java 多线程-4

    十四.sleep方法和wait方法的区别 [面试题] 相同点: 一旦执行方法,都可以使得当前线程进入阻塞状态. 不同点: 两个方法的声明位置不同:Thread类声明sleep():Object类中声明 ...

  9. redis之哨兵部署运行日志解读

    转载自http://www.run-debug.com/?p=674 192.168.110.21 主 192.168.110.31 从 #两台服务器都安装redis #下载最新稳定版本:http:/ ...

  10. hystrix文档翻译之开始使用

    获取包 使用maven获取包. <dependency> <groupId>com.netflix.hystrix</groupId> <artifactId ...