博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Prime is problem - 素数环问题
阅读量:6453 次
发布时间:2019-06-23

本文共 2090 字,大约阅读时间需要 6 分钟。

题目描述:

A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle separately, and the sum of numbers in two adjacent circles should be a prime.

Note: the number of first circle should always be 1.

输入:

n (1 < n < 17).

输出:

The output format is shown as sample below. Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely. The order of numbers must satisfy the above requirements. Print solutions in lexicographical order.

You are to write a program that completes above process.
Print a blank line after each case.

样例输入:
68
样例输出:
Case 1:1 4 3 2 5 61 6 5 2 3 4Case 2:1 2 3 8 5 6 7 41 2 5 8 3 4 7 61 4 7 6 5 8 3 21 6 7 4 3 8 5 2

为了解决该问题,我们可以采用回溯法枚举每一个值。当第一个数位为1确定时,我们尝试放入第二个数,使其和1的和为素数,放入后再尝试放入第三个数,使其与第二个数的和为素数,直到所有的数全部被放入环中,且最后一个数与1的和也是素数,那么这个方案即为答案,输出;若在尝试放数的过程中, 发现当前位置无论放置任何之前未被使用的数均不可能满足条件,那么我们回溯 改变其上一个数,直到产生我们所需要的答案,或者确实不再存在更多的解。
#include "stdafx.h"#include 
using namespace std;int prime[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37 };int number[20];bool hash[20];int n;bool isPrime(int num){ for (int i = 0; i < 12;i++) if (num == prime[i]) return true; return false;}void printArray(){ if (isPrime(number[n] + number[1]) == false) return; for (int i = 1; i <= n; i++) { if (i != 1) printf(" "); printf("%d", number[i]); } printf("\n");}void DFS(int num){ if (num > 1 && isPrime(number[num] + number[num - 1]) == false) return; if (num == n) { printArray(); return; } for (int i = 2; i <= n; i++) { if (hash[i] == false) { hash[i] = true; number[num + 1] = i; DFS(num + 1); hash[i] = false; } }}int main(){ int cas = 0; while (scanf("%d", &n) != EOF) { cas++; for (int i = 0; i < 20; i++) hash[i] = false; number[1] = 1; printf("Case %d:\n", cas); hash[1] = true; DFS(1); printf("\n"); } return 0;}
View Code

转载地址:http://gqyzo.baihongyu.com/

你可能感兴趣的文章
php5.5以上版本编译扩展模块方法
查看>>
[bash] 显示配色
查看>>
xargs 命令
查看>>
我的友情链接
查看>>
CHTools-OC版本目录介绍
查看>>
Rsync详解
查看>>
在JavaScript中创建对象
查看>>
visual studio git for coding
查看>>
hdu3949XOR(线性基)
查看>>
BIgInteger类和BigDecimal类的理解
查看>>
JVM内存结构及模型
查看>>
(转)对博士学位说永别 by 王珢
查看>>
h5常用
查看>>
requirejs(模块化)
查看>>
异常处理
查看>>
Python学习(5)条件语句
查看>>
最近在忙什么
查看>>
Document Interaction Programming Topics for iOS,文件通过应用程序打开
查看>>
I.MX6 su.c 测试
查看>>
EP-N8530S USB WIFI 驱动移植
查看>>