将1-n这n个数摆成一个环,要求相邻的两个数的和是一个素数,编程输出所有可能的解。
包括多组数据,每组1个数n。n<20
所有可能的解。
输出格式见样例。
6 8
Case 1: 1 4 3 2 5 6 1 6 5 2 3 4 Case 2: 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
#include
#include
using namespace std;
int a[50] = { 0 };
int b[50] = { 0 };
int n;
int c = 1;
bool sushu(int m)
{
for (int i = 2; i < m; i++)
{
if (m%i == 0)return false;
}
return true;
}
void f(int k)//k是指名是第几个数字
{
if (k == n + 1 && sushu(a[n] + a[1]))
{
for (int i = 1; i < n; i++)
{
cout << a[i] << ' ';
}
cout << a[n] << endl;
}
else
{
for (int i = 2; i <= n; i++)//i指的是要加的数字的大小,范围是Ii到n;
{
if (sushu(i + a[k - 1]) && b[i] != 1)
{
a[k] = i;
b[i] = 1;
f(k + 1);
b[i] = 0;
}
}
}
}
int main()
{
a[1] = 1;
while (cin >> n)
{
printf("Case %d:", c++);
cout << endl;
if (n % 2 != 0 || n == 1)
{
if (n == 1)cout << 1 << endl;
}
else
{
f(2);
}
cout << endl;
}
return 0;
}