描述
把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...