主题:回复者都+++++++
zhaoren
[专家分:420] 发布于 2005-11-13 21:10:00
[em18][em18][em18][em18][em18][em18][em18]问题:输入一个正整数N(〈=10),将1..2n这2n个数围成一圈,使任意相棱两数和为质数。规定:第一个数为1;
输出:一个方案
方案总数
如:
输入:4
输出:1 2 3 8 5 6 7 4
Total=4
哪位高手解的出啊?
(注:用TP解)
回复列表 (共10个回复)
沙发
小乖乖 [专家分:290] 发布于 2005-11-14 17:52:00
program f;
begin
.....
.....
end.
板凳
梦幻神兵 [专家分:600] 发布于 2005-11-14 18:07:00
先+再说!
3 楼
zhaoren [专家分:420] 发布于 2005-11-17 13:30:00
没人会吗?
4 楼
小虾虾 [专家分:300] 发布于 2005-11-17 14:48:00
用DP,好象类似于广度搜索。
5 楼
小虾虾 [专家分:300] 发布于 2005-11-17 14:55:00
以上纯属废话
6 楼
小虾虾 [专家分:300] 发布于 2005-11-17 14:55:00
sorry 我被盗号了
7 楼
绿步甲 [专家分:1610] 发布于 2005-11-17 21:00:00
++++++++fen
8 楼
绿步甲 [专家分:1610] 发布于 2005-11-18 19:05:00
++++++fen~~~~~~~~~~
9 楼
zhaoren [专家分:420] 发布于 2005-11-19 15:30:00
我编了个程序,while循环总是出不来,请各位高手看一看哪里错了:
program asd;
var ok,b:array[1..39]of boolean;
a:array[1..39] of integer;
k:longint;
i,n,j,s:integer;
begin
readln(n);
n:=n*2;
for i:=1 to 39 do a[i]:=1;
for s:=3 to 37 do
if s in[3,5,7,11,13,17,19,23,29,31,37] then
ok[s]:=ture;
i:=2;
while i>1 do begin
repeat
a[i]:=a[i]+1;
for j:=1 to i-1 do
if a[j]=a[i] then break;
for j:=i+1 to n do
if a[j]=a[i]then break;
if j=n then b[i]:=true;
until (a[i]>n)or(ok[a[i]+a[i-1]);
if a[i]>n then begin a[i]:=0;i:=i-1;end
else if i=n then k:=k+1
else begin i:=i+1;a[i]:=1;
end;
end;
for i:=1 to n do writeln(a[i],' ');
writeln('Total=',k);
end.
10 楼
梦幻神兵 [专家分:600] 发布于 2005-11-23 17:40:00
+++++++++
我来回复