PASCAL 素数环

来源:百度知道 编辑:UC知道 时间:2024/05/10 11:58:40
素数环
程序文件 PRIME.PAS/CPP/C
可执行文件 PRIME.EXE
输入文件 PRIME.IN
输出文件 PRIME.OUT
时间限制 10S

给定一个n,求1..n组成的环,使得环上相邻的元素和为素数。

输入
n(1<=n<=17)

输出
把1放在第一位置,按照字典顺序不重复的输出所有解(顺时针,逆时针算不同的两种),相邻两数之间严格用一个整数隔开,每一行的末尾不能有多余的空格。

样例
PRIME.IN
8

PRIME.OUT
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

帮忙看看我的程序为什么错?
var q,i,n:longint;
a:array[1..17] of integer;
b:set of 1..31;
procedure perm(k:longint);
var j,p,t:longint;
begin
if k=n then begin
for i:=1 to n-1 do
if (a[i]+a[i+1]) in b then q:=q+1;
if ((a[1]+a[n]) in b) and (q=n-1) then for i:=1 to n do if i<>n then write(a[i],' ')else begin write(a[i]);writeln;q:=0;exit;end;
end;
for j:=k t

b:=[2,3,5,7,11,13,17,19,23,29,31]; 意识很好,
你在定义过程中错了
Procedure exchange(a,b);
y:=a;
a:=b;
b:=y;
end;
For i:=1 to n-1 do
c:=1;d:=2;
While (true) do
If a[i]+a[i+1]<>b
then begin
exchange(a[i+c],a[i+d]);d:=d+1;
else break; {这不是排序,但需要一个一个交换比较加起来是否为素数,没有遗漏}
我只把主程序写了出来,其他小部分自己填充