主题:编程就+分(2期)!
Lovely哆啦
[专家分:1360] 发布于 2007-07-21 18:21:00
素数环
问题描述:
把从1到20这20个数摆成一个环,要求相邻的两个数的和是一个素数。
回复列表 (共5个回复)
沙发
Matodied [专家分:7560] 发布于 2007-07-22 20:50:00
就是递归问题。每个位置依次取不同的值,要求:
(1)不能有相同的。
(2)每个数和前面的那个数的和是素数,记住!取到最后一个元素时要把最后一个元素和第1个元素也检查一下。
板凳
Matodied [专家分:7560] 发布于 2007-07-22 20:59:00
程序:(n必须是偶数)
TYPE arr = ARRAY[1..64] OF INTEGER;
VAR
a: arr; n: INTEGER;
PROCEDURE pri;
VAR
i: INTEGER;
BEGIN
FOR i:=1 TO n DO WRITE(a[i], ' ');
HALT;
END;
FUNCTION isprime(m: INTEGER): BOOLEAN;
VAR
i: INTEGER; f: BOOLEAN;
BEGIN
f := TRUE;
FOR i:=2 TO TRUNC(SQRT(m)) DO BEGIN
IF m MOD i = 0 THEN f := FALSE;
END;
isprime := f;
END;
PROCEDURE try(i: INTEGER);
VAR
j, k: INTEGER; f: BOOLEAN;
BEGIN
FOR j:=1 TO n DO BEGIN
a[i] := j; f := TRUE;
FOR k:=1 TO i - 1 DO BEGIN
IF a[i] = a[k] THEN f := FALSE;
END;
IF f THEN BEGIN
f := isprime(a[i] + a[i - 1]);
END;
IF f THEN BEGIN
IF i < n THEN BEGIN
try(i + 1);
END ELSE BEGIN
IF isprime(a[i] + a[1]) THEN pri;
END;
END;
END;
END;
BEGIN
READLN(n);
IF n MOD 2 = 0 THEN BEGIN
try(1);
END ELSE BEGIN
WRITELN('Not solve.');
END;
END.
3 楼
Lovely哆啦 [专家分:1360] 发布于 2007-07-23 09:35:00
程序不对!!
4 楼
Matodied [专家分:7560] 发布于 2007-07-23 13:23:00
我的程序是对的.
不过我输出的不是环形,而是从第1个元素开始到最后一个元素结束的链条。
5 楼
Lovely哆啦 [专家分:1360] 发布于 2007-07-23 15:25:00
[quote]你的程序是对的.
不过你输出的不是环形,而是从第1个元素开始到最后一个元素结束的链条。[/quote]
我来回复