| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1545 人关注过本帖
标题:大家来看看这个排序问题
只看楼主 加入收藏
仁者无敌
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2006-3-5
收藏
 问题点数:0 回复次数:20 
大家来看看这个排序问题
将1、2、...、20这20个数排成一排,使得相邻的两个数之和为一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。
只要求高手把算法写出来,谢谢了
搜索更多相关主题的帖子: 编程 算法 
2006-05-12 16:53
justicesun
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2006-5-6
收藏
得分:0 
想起前些日子做的一道题..优美和数..

Java
2006-05-12 16:55
lshp5566
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-5-9
收藏
得分:0 
用个数组来存储这20个数啊!!

然后判断该数组中的树是否为素数!!就ok了
2006-05-12 17:09
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
这个问题等价于把1-20排成一个圆环,相邻两个数为质数(2,3,5,7,11,13,17,19,23,29,31,37)这几个数,
我暂时想不到好的办法,从20出发,能作它邻居的只有3,9,11,17这四个数了,我原本想,定义个20*20的二维数组,如果数i与j能相邻则a[i][j]=1;否则为0,如此寻找一个可以延续的环,可是失败了
这道题挺有意思,俺回去想……

对不礼貌的女生收钱......
2006-05-12 17:32
freeforever
Rank: 4
等 级:业余侠客
威 望:3
帖 子:368
专家分:201
注 册:2005-11-2
收藏
得分:0 

俺沒做出來,有個寫了一半的程式,灌回水:
#include"stdio.h"
#include"math.h"
#define UBOUND 20
int isOK(int intNum)
{
int i,j=0;
for(i=2;i<sqrt(intNum)+1;++i)
{
if(intNum%i==0)
{
j=1;break;
}
}
if(j==0)return(1);
else return(0);
}
int over(int ary[])
{
int i,j=0;
for(i=0;i<UBOUND-1;++i)
if(isOK(ary[i]+ary[i+1])!=1)
{
j=1;break;
}
if(j==0)return(1);
else return(0);
}
int main()
{
struct data
{
int val;
int flag;
}ary[2][UBOUND];
int i,j,k=0,tmp[20];
for(i=0;i<UBOUND;i++)
{
ary[0][i].val=i+1;
ary[0][i].flag=0;
}
do
{
for(i=0;i<UBOUND-1;i++)
{
for(j=i+1;j<UBOUND;j++)
{
if(ary[0][i].flag==0 && ary[0][j].flag==0)
if(isOK(ary[0][i].val+ary[0][j].val)==1)
{
ary[0][i].flag=1;ary[0][j].flag=1;
tmp[k++]=ary[0][i].val;
tmp[k++]=ary[0][j].val;
}
}
}
k=0;
for(i=0;i<UBOUND;i++)
{
ary[0][i].val=tmp[i];
}
for(i=0;i<UBOUND;++i)
printf("%3d",tmp[i]);
getchar();
}while (over(tmp)==0);
for(i=0;i<UBOUND;++i)
printf("%3d",tmp[i]);
}

死循環了!!


其实我也很无聊!
2006-05-12 19:32
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
我有空也想想,有点意思

淘宝杜琨
2006-05-12 20:26
oヤ偽妳變壞
Rank: 2
等 级:新手上路
威 望:4
帖 子:2251
专家分:0
注 册:2006-3-19
收藏
得分:0 
有空回去想想
2006-05-12 22:33
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
我写了下,结果挺多,也是对的(不过有点怪怪的),晚上再发程序

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-13 06:26
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

#include <stdio.h>
int prim[]={2,3,5,7,11,13,17,19,23,29,31,37};
int b[21];
int counter=0;
int a[20];
int k=1;
void function(int);
int main()
{
int i;
for (i=1;i<21;i++)
b[i]=0;
a[0]=20;
function(20);
getch();
return 0;

}
void function(int j)
{
int m,i;
b[j]=1;
counter++;
if(counter==20)
{
if(j==3||j==9||j==11||j==17)
{
for (m=0;m<k;m++)
printf("%4d",a[m]);
printf("\n");
getch();
}
}
else
{
for(i=0;i<12;i++)
if(b[prim[i]-j]==1||prim[i]-j<=0||prim[i]-j>=20)
continue;
else
{
a[k++]=prim[i]-j;
function(prim[i]-j);
k--;
counter--;
b[prim[i]-j]=0;
}
}
}


对不礼貌的女生收钱......
2006-05-13 08:38
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

做出来了!程序是按递归去做的.
具体也没什么好的算法,跟做八皇后的思路有些像.
你看下程序就知道了,要我描述这道题的算法我还真不会描述
不好意思啊.
也许版主老大和高手们有更好的算法,我的算法总是比较垃圾的。


对不礼貌的女生收钱......
2006-05-13 08:42
快速回复:大家来看看这个排序问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018305 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved