回 帖 发 新 帖 刷新版面

主题:编程就+分(2期)!

素数环
问题描述:
把从1到20这20个数摆成一个环,要求相邻的两个数的和是一个素数。

回复列表 (共5个回复)

沙发

就是递归问题。每个位置依次取不同的值,要求:

(1)不能有相同的。
(2)每个数和前面的那个数的和是素数,记住!取到最后一个元素时要把最后一个元素和第1个元素也检查一下。

板凳

程序:(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 楼

程序不对!!

4 楼

我的程序是对的.

不过我输出的不是环形,而是从第1个元素开始到最后一个元素结束的链条。

5 楼

[quote]你的程序是对的.

不过你输出的不是环形,而是从第1个元素开始到最后一个元素结束的链条。[/quote]

我来回复

您尚未登录,请登录后再回复。点此登录或注册