1008 素數環問題

2021-07-04 10:47:53 字數 821 閱讀 3567

描述

把1到20這重新排列,使得排列後的序列a滿足:

a. 任意相鄰兩個數之和是素數

b. 不存在滿足條件a的序列b使得:a和b的前k(0 <= k <= 19)項相同且b的第k+1項比a的第k+1項小。

輸入 沒有輸入。

輸出 輸出a,兩個數字之間用乙個空格隔開,第乙個數字前面和最後乙個數字後面沒有空格。

輸入樣例

輸出樣例

提示 本題不提供輸出樣例。

#include 

#include

#include

using

namespace

std;

int a[21]; //存放結果的陣列

int sum=0;

void print()

}void swap(int m,int i)

int isprime(int num)

return1;}

void search(int m)

else

}}int main()

分析:利用回溯演算法,假設前m個數已經排好的情況下,安排第m+1個數,其中,每個數的安排都要通過檢測其與前面乙個數的和是否為素數,如果是,則繼續安排下乙個數。

初始化的時候,先講a[i]位對應i,在search()函式中再將m位的元素與可能的元素進行交換。

尚未解決的問題:在程式設計的過程中,發現輸出結果是無限的陣列並且每次結果不一樣,在借鑑了別人的答案之後,在print()函式裡加了計數變數sum,sum==2時輸出,便可以只輸出一組結果,但作者現在還不明白是為什麼。

NOJ 1008 素數環問題

把1到20這重新排列,使得排列後的序列a滿足 a.任意相鄰兩個數之和是素數 b.不存在滿足條件a的序列b使得 a和b的前k 0 k 19 項相同且b的第k 1項比a的第k 1項小。即按字典序排列的第一項 沒有輸入。輸出a,兩個數字之間用乙個空格隔開,第乙個數字前面和最後乙個數字後面沒有空格。無無 i...

noj1008 素數環問題

1008.素數環問題 時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述把1到20這重新排列,使得排列後的序列a滿足 a.任意相鄰兩個數之和是素數 b.不存在滿足條件a的序列b使得 a和b的前k 0 k 19 項相同且b的第k 1項比a的第k 1項小。即按字典序排列的第一項 輸...

NOJ 1008 素數環問題

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述把1到20這重新排列,使得排列後的序列a滿足 a.任意相鄰兩個數之和是素數 b.不存在滿足條件a的序列b使得 a和b的前k 0 k 19 項相同且b的第k 1項比a的第k 1項小。即按字典序排列的第一項 輸入沒有輸入。輸出輸出a...