UVA - 524 Prime Ring Problem
2015-10-15 09:32
295 查看
Description
A ring is composed of n (even number) circles as shown in diagram. Put natural numbers
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.
requirements.
You are to write a program that completes above process.
Sample
Sample
分析:本题可采用回溯发求解,注意把素数的判断用数组提前计算出来,另外注意输出格式。
A ring is composed of n (even number) circles as shown in diagram. Put natural numbers
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.
Input
n (0 < n <= 16)Output
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 aboverequirements.
You are to write a program that completes above process.
Sample
Input
6 8
Sample
Output
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
分析:本题可采用回溯发求解,注意把素数的判断用数组提前计算出来,另外注意输出格式。
#include <iostream> #include <algorithm> #include <cmath> #include <cstring> using namespace std; const int maxn = 17; int isp[maxn*2]; int A[maxn]; int vis[maxn]; int n; int is_prime(int n) { if(n<2) return 0; for(int i=2; i<=sqrt(n); i++) if(n%i==0) return 0; return 1; } void dfs(int cur) { if(cur==n && isp[A[0]+A[n-1]]) { for(int i=0; i<n; i++) { if(i>0) cout << ' '; cout << A[i]; } cout << endl; }else{ for(int i=2; i<=n; i++) { if(!vis[i] && isp[i+A[cur-1]]) { vis[i] = 1; A[cur] = i; dfs(cur+1); vis[i] = 0; } } } } int main() { for(int i=1; i<maxn*2; i++) isp[i] = is_prime(i); int kase = 0; while(cin >> n) { if(kase) cout << endl; cout << "Case " << ++kase << ":\n"; memset(vis, 0, sizeof(vis)); A[0] = 1; dfs(1); } return 0; }
相关文章推荐
- C# using 三种使用方式
- 质量百分百的一次成功
- Java IO读写大文件的几种方式及测试
- 玩具
- 【转】nonatomic, retain,weak,strong用法详解
- EasyUI DataGrid formatter 格式化增加链接
- 数据库表的导入导出
- HDOJ1159 Common Subsequence(dp)
- 在帝国CMS列表模板list.var中写PHP代码
- Scala之Demo2
- 公司技术的确定
- jraiser
- mv*
- JS利用cookie记忆当前位置的防刷新导航效果
- Codevs1648 最大和
- Facebook SDK导入eclipse-android
- 实现 oracle数据库转意数据到Mysql,最简单最直接
- 批量导出access某表内容到word文档
- 最长递增子序列-动态规划
- Everything 本地磁盘文件搜索工具下载!