素数环

题解:素数环 搜索与回溯是计算机解题中常用的算法,很多问题无法根据某种确定的计算法则来求解,可以利用搜索与回溯的技术求解。回溯是搜索算法中的一种控制策略。它的基本思想是:为了求得问题的解,先选择某一种可能情况向前探索,在探索过程中,一旦发现原来的选择是错误的,就退回一步重新选择,继续向前探索,如此反复进行,直至得到解或证明无解。...... 阅读详情
#include <stdio.h>

#define N 17

int a[N];

int mark[N];

int n;

bool isPrime(int t) {

    for(int i = 2; i < t; i ++) {

        if(t % i == 0) return false;
    }

    return true;
}

void prime(int pre, int sum) {

    if(sum == n) {

		if(isPrime(a[n - 1] + 1))
		{
			for(int i = 0; i < n; i ++) {

				printf("%d ", a[i]);
			}

			printf("\n");
		}

		return ;
    }

    for(int i = 2; i <= n; i ++) {

        if(isPrime(i + pre) && mark[i] == 0) {

			a[sum] = i;

			mark[i] = 1;

            prime(i, sum + 1);

			mark[i] = 0;
		}

    }
}

int main()
{
    int cs = 0;

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

        cs ++;

		for(int i = 0; i <= n; i ++) mark[i] = 0;

        a[0] = 1;
		mark[1] = 1;

		printf("Case %d:\n", cs);

        prime(1, 1);
    }
    return 0;
}


 

 

素数环问题 DFS 素数环问题 将从1到n这n个整数围成一个圆环, 若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环。 现要求输入一个n,求n个数围成一圈有多少种素数环, 规定第一个数字是1。写出相应的的算法思想并编程实现。 样例: (1) input: 6 output: 1 4 3 2 5 6 1 6 5 2 3 4 (2) input: 8 output: 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... 阅读详情

相关推荐

C语言回溯算法之素数环

问题描述:将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环。 n=20时,下面的序列就是一个素数环:1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 20 11 12 19 18 解题思路:创建一个长度为N的一维数组,初始化数组为0,然后采用回溯算法依次安放下一个位置的数字,直到所有数据安放完成。代码如下: #include <stdio.h> #include <stdlib.h> #includ

u010179747的博客 2831

素数环圈——回溯法

任务描述 本关任务:把从 1 到 n 这 n 个数摆成一个环,要求相邻的两个数的和是一个素数。 测试输入: 20 预期输出: 围成的圈是:1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 20 11 12 19 18 #include<stdio.h> #include<math.h> int a[40] = { 0,1 }, n, isPrime[40], vis[40] = { 0,1 }, flag = 0; void dfs(int x, in

m0_47135938的博客 4024

素数环问题的非递归实现

     关于素数环问题,我在早先的一个帖子里已经做了详细的说明。那时候我用的是递归的方式来实现的。今天我又使用非递归的方式把这个问题做了一遍,有兴趣的网友可以一起探讨!package andycpp;public class Main ...{    public static void main(String[] args) ...{        primering(20);    

华丽的痘痘 2827

【算法】回溯法——素数环问题(C语言)

题目: 把从1到n这n个数摆成一个环,要求相邻两个数的和是一个素数,求出所有解法。 思路: 用数组a模拟n个数组成的环。 递归地填数: 判断第 k 种可能是否合法, 如果合法则填数;判断是否到达目标(n个数已填完),是则输出,不是则递归填下一个 如果不合法则选择下一种可能; 完整代码+注释 # include<stdio.h> # include<math.h> int a[20]; //用数组模拟n个数组成的环 int check_1(int x, int i);

weixin_51450101的博客 5465

队列应用——素数环问题(通过回溯法解决)

1、问题描述 将1~n的 n个自然数排列成环形,使得每相邻两数之和为素数,从而构成一个素数环。 2、基本要求 设计算法对任意输入的自然数n,求解素数环问题。如果无解,给出相应提示;否则,依次输出素数环中的数据。 3、思路 (1)先引入顺序表类Sqlist和链队列类LinkQueue,再创建Sqlist类的一个对象L作为顺序表,用于存放素数环的数据元素;创建LinkQueue类的一个对象Q,作为队列...

鹿谷門実的博客 3181

素数环——回溯法

素数环满足三个条件: 1)与已经填写的素数环中的整数不重复 2)与前面相邻的整数之和是个素数 3)最后一个填写到素数环中的整数与第一个填写的整数之和是整数 20以内的素数环: 1 2 3 4 1 4 3 2 5 6 1 2 3 8 5 6 7 4 1 2 3 4 7 6 5 8 9 10 1 2 3 4 7 6 5 12 11 8 ...

weixin_42395580的博客 776

素数环问题(回溯法)

素数环是一个计算机程序问题,指的是将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环。 现在要求输入一个n,求n个数围成一圈有多少种素数环,规定第一个数字是1。 #include&lt;iostream&gt; #include&lt;math.h&gt; using namespace std; int n=0; int a[100];...

kkkkkkkk的博客 1万+

算法设计与分析————回溯法

第3关:素数环 本关任务:把从 1 到 n 这 n 个数摆成一个环,要求相邻的两个数的和是一个素数。 #include <bits/stdc++.h> using namespace std; /********** Begin **********/ const int maxn = 21; int p[maxn]; bool vis[maxn]; bool flag; int n; bool prime(int n) { if (n < 2) ret

Junds0的博客 945

求解素数环问题

素数:   质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除(除0以外)的数称之为素数(质数);否则称为合数。根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。最小的质数是2。 素数环:   将从1到n这n个整数围成一

雪夜&流星的专栏 1172

素数环PrimeRing

把1~N这N个整数摆成一个环,要求任意相邻两个数的和为素数。按字典序打印出以1开始的素数环。

AIGC 1915

素数环问题

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

上一篇: 07年浙大复试上机题
下一篇: HDOJ 1005
walter1990
博客等级 码龄15年 31粉丝 376原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值