社区
数据结构与算法
帖子详情
金山不愧是金山,我大学参加过的最难的考试,看大家有没有兴趣?
boluoCTO
2003-10-25 02:03:40
两个半小时5道题,我最后一道没做.其中一道编程题是这样的.
六个数1、2、3、4、5、6,排成一列,保证相邻两数之和为素数,
第一个数与最后一个数之和也为素数,编程输出所有的组合。
金山果然是来找高手的.
...全文
80
66
打赏
收藏
金山不愧是金山,我大学参加过的最难的考试,看大家有没有兴趣?
两个半小时5道题,我最后一道没做.其中一道编程题是这样的. 六个数1、2、3、4、5、6,排成一列,保证相邻两数之和为素数, 第一个数与最后一个数之和也为素数,编程输出所有的组合。 金山果然是来找高手的.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
66 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
AaronTJ
2003-11-09
打赏
举报
回复
人工智能之产生式系统
strafer
2003-11-09
打赏
举报
回复
to slavik(Norns):
老弟的功底真是不错,概念很清晰,让人一看就明白你的解题思路了!
学习中。。。
shines77
2003-11-09
打赏
举报
回复
mark一下,有空我也写一个
michaelli
2003-11-05
打赏
举报
回复
给你看一下1到20的算法代码(原创)6个太简单了
#include<iostream.h>
#include<math.h>
#include<fstream.h>
int IfPrimeNum(int,int); //返回值为1表示和为素数,为0则不是
void PutOut(int *);
main()
{
int array[20]={0}; //按顺序存储该环的每个结点的数
array[0]=1;
int record[20];
for(int i=0;i<20;i++)
record[i]=1;
int flag; //标志是否满足约束,为1则不满足
int k=1;
while(k>=1&&k<20)
{
flag=-1;
if(record[k]<20)
{
record[k]++;
array[k]=record[k];
for(int i=0;i<k;i++)
{
if(array[k]==array[i])
flag=1;
}
if(IfPrimeNum(array[k-1],array[k])==0)
flag=1;
if(k==19) //考虑两头的情况
{
if(IfPrimeNum(array[0],array[k])==0)
flag=1;
}
if(flag!=1) //既满足显约束也满足隐约束
{
if(k==19) PutOut(array);
else k=k+1;
}
}
else
{
k=k-1;
record[k+1]=1;
}
}
}
int IfPrimeNum(int a,int b)
{
int sum=a+b;
int temp=sqrt(sum);
for(int i=2;i<=temp;i++)
{
if(sum%i==0)
return 0;
}
return 1;
}
void PutOut(int *x)
{
for(int i=0;i<20;i++)
cout<<x[i]<<" ";
cout<<endl;
//输出到文件中
fstream file;
file.open("letter.txt",ios::in|ios::out);
for(i=0;i<20;i++)
{
file.seekg(0,ios::end);
file<<x[i]<<" ";
}
file<<endl;
file.close();
}
结果在letter.txt文件中
zytang2003
2003-11-05
打赏
举报
回复
很简单,用回溯,可以直接套用<<数据结构>>教材上的例题,大概10年前我就做过,不过那时用的是BASIC,用的是数组,写完几天后,自己就看不懂了。后来再用c用回溯法写了一次,很容易的。
toyjoy
2003-11-05
打赏
举报
回复
强调一下,考试的时间很短,不可能想得太多!!
csyw
2003-11-03
打赏
举报
回复
up
FishCrazy
2003-11-03
打赏
举报
回复
补充一下,是亚洲区的
FishCrazy
2003-11-03
打赏
举报
回复
其实这就是1996年的ACM/ICPC的题C
slavik
2003-10-31
打赏
举报
回复
哈西表表在这里有什么用吗?
我又改了代码,深度变成3了。一次确定两个数。
// PrimeList.cpp : 定义控制台应用程序的入口点。
//
#include <stdio.h>
#define MAX_SUCC 3
#define MAX_NUM 6
#define MIN_NUM 1
#define MAP_SIZE 14
#define STACK_SIZE 3
struct node {
int a, b; //<a,b>
int succ[MAX_SUCC];
};
node g_map[] = {
{ 1, 2, 4, 6, -1 }, //0: <1,2>-><3,4>|<5,6>
{ 2, 1, 5, 7, -1 }, //1: <2,1>-><4,3>|<6,5>
{ 2, 3, 9, -1, -1 }, //2: <2,3>-><4,1>
{ 3, 2, 8, 12, 6 }, //3: <3,2>-><1,4>|<1,6>|<5,6>
{ 3, 4, 0, 12, -1 }, //4: <3,4>-><1,2>|<1,6>
{ 4, 3, 10, -1, -1 }, //5: <4,3>-><2,5>
{ 5, 6, 8, 0, -1 }, //6: <5,6>-><1,4>|<1,2>
{ 6, 5, 1, 2, -1 }, //7: <6,5>-><2,1>|<2,3>
{ 1, 4, 3, -1, -1 }, //8: <1,4>-><3,2>
{ 4, 1, 2, 10, 7 }, //9: <4,1>-><2,3>|<2,5>|<6,5>
{ 2, 5, 13, -1, -1 }, //10: <2,5>-><6,1>
{ 5, 2, 8, 12, 4 }, //11: <5,2>-><1,4>|<1,6>|<3,4>
{ 1, 6, 11, -1, -1 }, //12: <1,6>-><5,2>
{ 6, 1, 12, 10, 5 } //13: <6,1>-><2,3>|<2,5>|<4,3>
};
bool visited[] = { false,
false,false,
false,false,
false,false
};
int g_stack[] = { 0, 0, 0 };
int g_top = -1;
int g_total = 0;
bool isPrime( int num ) {
const static bool result[] = { false, //0
true, //1
true, //2
true, //3
false, //4
true, //5
false, //6
true, //7
false, //8
false, //9
false, //10
true //11
};
return result[num];
}
int pop() {
int num = g_stack[g_top];
g_top --;
return num;
}
void push( int num ) {
g_stack[++g_top] = num;
}
void printResult() {
printf( "%d, %d, %d, %d, %d, %d\n", g_map[g_stack[0]].a, g_map[g_stack[0]].b, g_map[g_stack[1]].a,
g_map[g_stack[1]].b, g_map[g_stack[2]].a, g_map[g_stack[2]].b);
g_total ++;
}
void visit( int n ) {
int succ = -1;
push( n );
visited[ g_map[n].a ] = true;
visited[ g_map[n].b ] = true;
if( g_top < 2 ) {
//continue search
int i = 0;
for( succ = g_map[n].succ[i]; succ != -1 && i < MAX_SUCC; succ = g_map[n].succ[++i] ) {
if( !( visited[g_map[succ].b] || visited[g_map[succ].a] ) ) {//visit new number pair
visit( succ );
}
}
} else {
//reached end
if( isPrime( g_map[g_stack[0]].a + g_map[g_stack[2]].b ) ) {
printResult();
}
}
visited[ g_map[n].a ] = false;
visited[ g_map[n].b ] = false;
pop();
}
int main(void)
{
for( int i =0; i < MAP_SIZE; i++ ) {
visit( i );
}
printf( "Total: %d", g_total );
getchar();
return 0;
}
v_salt
2003-10-31
打赏
举报
回复
可以先建立恰西表
slavik
2003-10-31
打赏
举报
回复
有没有全部题,我想看看。还有一个学年就要毕业了。
skywind
2003-10-31
打赏
举报
回复
哦,我全部做了,但是有些答得简略,都正确了呵呵
loveisbug
2003-10-31
打赏
举报
回复
看看
sclzmbie
2003-10-30
打赏
举报
回复
apogeecsj(Running(OOP+DS+AL)) 的方法就很好,才6个数用不着那么多复杂的算法。如果不是关键路径的话最简单的算法最好。
slavik
2003-10-30
打赏
举报
回复
不需要剪枝,也没有很多条件判断。所以会快许多。
slavik
2003-10-30
打赏
举报
回复
#include <stdio.h>
#define MAX_SUCC 3
#define MAX_NUM 6
#define MIN_NUM 1
#define MAP_SIZE 14
struct node {
int a, b; //<a,b>
int succ[MAX_SUCC];
};
node g_map[] = {
{ 1, 2, 2, 10, -1 }, //0: <1,2>-><2,3>|<2,5>
{ 2, 1, 8, 12, -1 }, //1: <2,1>-><1,4>|<1,6>
{ 2, 3, 4, -1, -1 }, //2: <2,3>-><3,4>
{ 3, 2, 1, 10, -1 }, //3: <3,2>-><2,1>|<2,5>
{ 3, 4, 9, -1, -1 }, //4: <3,4>-><4,1>
{ 4, 3, 3, -1, -1 }, //5: <4,3>-><3,2>
{ 5, 6, 13,-1, -1 }, //6: <5,6>-><6,1>
{ 6, 5, 11,-1, -1 }, //7: <6,5>-><5,2>
{ 1, 4, 5, -1, -1 }, //8: <1,4>-><4,3>
{ 4, 1, 0, 12, -1 }, //9: <4,1>-><1,2>|<1,6>
{ 2, 5, 6, -1, -1 }, //10: <2,5>-><5,6>
{ 5, 2, 1, 2, -1 }, //11: <5,2>-><2,1>|<2,3>
{ 1, 6, 7, -1, -1 }, //12: <1,6>-><6,5>
{ 6, 1, 0, 8, -1 } //13: <6,1>-><1,2>|<1,4>
};
bool visited[] = { false,
false,false,
false,false,
false,false
};
int g_stack[] = { 0, 0, 0, 0, 0, 0 };
int g_top = -1;
int g_total = 0;
bool isPrime( int num ) {
const static bool result[] = { false, //0
true, //1
true, //2
true, //3
false, //4
true, //5
false, //6
true, //7
false, //8
false, //9
false, //10
true //11
};
return result[num];
}
int pop() {
int num = g_stack[g_top];
g_top --;
return num;
}
void push( int num ) {
g_stack[++g_top] = num;
}
void printResult() {
printf( "%d, %d, %d, %d, %d, %d\n", g_stack[0], g_stack[1], g_stack[2], g_stack[3],
g_stack[4], g_stack[5], g_stack[6] );
g_total ++;
}
void visit( int n ) {
int b = g_map[n].b;
int succ = -1;
visited[b] = true;
push( b );
if( g_top >= 5 ) {
//reached end
if( isPrime( g_stack[0] + g_stack[5] ) ) {
printResult();
}
} else {
//continue search
int i = 0;
for( succ = g_map[n].succ[i]; succ != -1; succ = g_map[n].succ[++i] ) {
if( visited[g_map[succ].b] == false ) {//visit new number pair
visit( succ );
}
}
}
visited[b] = false;
pop();
}
int main(void)
{
for( int i =0; i < MAP_SIZE; i++ ) {
int a = g_map[i].a;
visited[a]= true;
push(a);
visit( i );
pop();
visited[a]=false;
}
printf( "Total: %d", g_total );
getchar();
return 0;
}
slavik
2003-10-30
打赏
举报
回复
可以按序偶搜索
可能出现的序偶为
<1,2> <2,1>
<2,3> <3,2>
<3,4> <4,3>
<5,6> <6,5>
<1,4> <4,1>
<2,5> <5,2>
每个序偶的后继为
<1,2>-><2,3>|<2,5>
<2,1>-><1,4>
<2,3>-><3,4>
<3,2>-><2,1>|<2,5>
<3,4>-><4,1>
<4,3>-><3,2>
<5,6>->NULL
<6,5>-><5,2>
<1,4>-><4,3>
<4,1>-><1,2>
<2,5>-><5,6>
<5,2>-><2,1>|<2,3>
把图建完,从每个节点开始递归走一边,把所有节点都不重复地访问到,只要首尾和为素数,就算出来了。
利用数据结构直接避免前后只和为素数地判断,提高效率,算法实现也简化了。如果动态改变图的状态,给每个节点加一个标志,那么没加入一个新的节点<,a>就把所有<x,a>的节点置为false,初始时(从<a,b>开始>必须把所有<x,a>和<x,b>的节点置为false,x为任意值。
节点描述如下
struct node {
int a, b; //<a,b>
int succ[3]; //succ = -1表示结束
bool enable;
}
图
struct node g[12] = {//之前说的数据};
xiaonian_3654
2003-10-30
打赏
举报
回复
我靠,很简单啊,
这都不会,就不要出去混了,
我就纳闷,为什么程序员掉价
原来菜鸟太多了,
哎,害的我吃窝窝头
caohoujie
2003-10-30
打赏
举报
回复
To winco(老狼):
如果你看了我的代码,你很可能就不会
把你的东东贴出来啦
加载更多回复(46)
8102秋季校招:我的校招经历+Android岗总结(面经+技巧)
8102秋季招聘:Android岗总结(面经+技巧) 前言 先交代下教育背景,武汉某双非
大学
(非985非211
大学
,就是普通一本),本科学历,可以说这个硬性条件在现在这个年头已经是很大的劣势了,据不完全统计,现在找工作的70%以上都是硕士,还有5%的博士,没错,我就是剩下那一部分头铁的本科生,也不知道这个数据是否真实,但是从我自身经历来看,每次面试等待时,我都会好奇,主动搭话问一问一起面试的同学...
我的心痛2009
#define 关于2009有很多话想说,有很多事值得去回忆。Void 最后一个漫长的寒假(招聘会, 笔试, 面试){ 12月(08年)初就回苏州的; 离开”
金山
训练营”4个多月了, 即便呆在学校也是整天看看电视/看看书, 反正也不上课了, 很多人都去实习了, 呆在学校也没意思; 毕业设计也是随便选的题目, 我和阿欢都还觉得挺满意; 回绝的”安联锐视”的offer, 回来以后突然
【3.19更新日志】JVS低代码、智能BI、物联网功能新增
2024
金山
办公春招已启动,特别是c++岗位大量招聘,薪资可观,硕士18k起步,本科14k起步,相比。2024
金山
办公春招已启动,特别是c++岗位大量招聘,薪资可观,硕士18k起步,本科14k起步,相比。2024
金山
办公春招已启动,特别是c++岗位大量招聘,薪资可观,硕士18k起步,本科14k起步,相比。2024
金山
办公春招已启动,特别是c++岗位大量招聘,薪资可观,硕士18k起步,本科14k起步,相比。国企,高薪,稳定,前景,技术,厦门这些关键词联合在一起,简直不要太好的机会啦~拥有互联网的待遇,国企。
24届中国人寿科技金融岗(JAVA开发)笔试+面试经验
大家都好热情,说话又好听,一开口就有人贴心地替我陈述观点,让我获得了咳嗽清嗓子的机会,半小时下来喉咙清爽极了,太贴心辣!百度前端社招三轮技术面过了,今天和HRBP面,问了我期望薪资,预计入职时间这些就不问了,然后具体的薪资组成和福利待遇都是我自己问的,是不是凉了,有点慌啊,百度的。来了三个人面试,一个年轻的小姐姐是主持人,一个是接近4。9.13笔试,10.11一面,10.16二面,10.24三面,11.07 hr面,然后直接谈薪,可以接受就直接发带薪offer,跳过了意向部门是安全产品啥的,b。
题解 | #拦截导弹# java &;&; c++
先自我介绍,然后问项目。29所
参加
了提前批进了终面,但是由于投递的岗位不在提前批次招聘所以挂了,重新投递正式批,宣讲会上老师说都可以面试,但是好像直接没有面试机会了(没有面试短信,首次。实习转正失败后,整个人信心崩塌,面试官质疑我不能毕业,大哭特哭,回来秋招连面试都很少很少,进华池子是俺最近收到的最好的消息啦,虽然不一定能泡开,但好在没有挂我给。#用友sp#本人是前端开发,用友薪资开的比较高,参照offershow上的sp开奖,这两天就要申请签约了,感觉比往年美团携程都高,有了解用友情况的uu可以分享下。
数据结构与算法
33,029
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章