HDU 1016 Prime Ring Problem
2015-07-25 11:00
459 查看
题目地址:点击打开链接
思路:回溯,用a数组保存素数的值
AC代码:
AC代码2:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>
typedef long long ll;
using namespace std;
int a[30];
int visit[30];
int isprime[40];
int k=0;
int n;
void doprime()
{
int i,j;
memset(isprime,0,sizeof(isprime));
isprime[1] = 0;
for(i=2; i<=40; i++)
{
for(j=2; j*j<=i; j++)
{
if(i % j == 0)
break;
}
if(j*j>i)
isprime[i] = 1;
else
isprime[i] = 0;
}
}
void dfs(int st)
{
int i,j;
for(i=2; i<=n; i++)
{
if(!visit[i])
{
if(isprime[i+a[st-1]])
{
if(st == n)
{
if(isprime[i+1])
{
a[st] = i;
for(j=1; j<=n-1; j++)
{
printf("%d ",a[j]);
}
printf("%d\n",i);
}
}
else
{
visit[i] = 1;
a[st] = i;
dfs(st+1);
visit[i] = 0;
}
}
}
}
}
int main()
{
doprime();
int cas = 1;
while(scanf("%d",&n) != EOF)
{
memset(visit,0,sizeof(visit));
a[1] = 1;
printf("Case %d:\n",cas++);
dfs(2);
printf("\n");
}
return 0;
}
训练赛时做的
思路:回溯,用a数组保存素数的值
AC代码:
#include<stdio.h> #include<string.h> int a[40],b[20],vis[20],n; void dfs(int cur) { int i; if(cur == n && a[b[n-1]+b[0]]) { for(i=0; i<n-1; i++) { printf("%d ",b[i]); } printf("%d\n",b[n-1]); } else { for(i=2; i<=n; i++) { if(!vis[i] && a[i+b[cur-1]]) { b[cur] = i; vis[i] = 1; dfs(cur+1); vis[i] = 0; } } } } int main() { int i,j,l=1; for(i=2; i<=40; i++) { for(j=2;j*j<=i;j++) { if(i % j == 0) { a[i] = 0; break; } } if(j*j>i) a[i] = 1; } while(scanf("%d",&n) != EOF) { b[0] = 1; memset(vis,0,sizeof(vis)); printf("Case %d:\n",l++); dfs(1); printf("\n"); } return 0; }
AC代码2:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>
typedef long long ll;
using namespace std;
int a[30];
int visit[30];
int isprime[40];
int k=0;
int n;
void doprime()
{
int i,j;
memset(isprime,0,sizeof(isprime));
isprime[1] = 0;
for(i=2; i<=40; i++)
{
for(j=2; j*j<=i; j++)
{
if(i % j == 0)
break;
}
if(j*j>i)
isprime[i] = 1;
else
isprime[i] = 0;
}
}
void dfs(int st)
{
int i,j;
for(i=2; i<=n; i++)
{
if(!visit[i])
{
if(isprime[i+a[st-1]])
{
if(st == n)
{
if(isprime[i+1])
{
a[st] = i;
for(j=1; j<=n-1; j++)
{
printf("%d ",a[j]);
}
printf("%d\n",i);
}
}
else
{
visit[i] = 1;
a[st] = i;
dfs(st+1);
visit[i] = 0;
}
}
}
}
}
int main()
{
doprime();
int cas = 1;
while(scanf("%d",&n) != EOF)
{
memset(visit,0,sizeof(visit));
a[1] = 1;
printf("Case %d:\n",cas++);
dfs(2);
printf("\n");
}
return 0;
}
训练赛时做的
相关文章推荐
- 微软Win10 Build 10240推送更新补丁修正版KB3074680
- hadoop Hdfs文件上传下载
- C语言(3)--Fibonacci数列、候选人得票统计、字符串复制函数
- 数据库之总1
- 数据库之横表转纵表、纵表转横表
- 有序数组和二分法
- unbutu下安装与配置phpmyadmin
- 04-树9. Path in a Heap (25)
- UVa 11078 - Open Credit System(维护最大值)
- [Leetcode 150, Medium] Evaluate Reverse Polish Notation
- SQLserver数据库中带循环处理的存储过程
- OC_交叉引入头文件问题
- html 代码初识——<a>标签
- .net学习之委托
- .net学习之messagebox的各种枚举
- bindService bind AAR里的服务出错
- 史上最全的随机数生成java算法
- .git目录结构
- pcl配置中遇到的问题
- 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展