Note: the number of first circle should always be 1.
You are to write a program that completes above process.
Print a blank line after each case.
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
答案:
bool vist[20];
int value[20];
int n;
bool IsLegal(int a, int b)
{
int i, k = 0;
int v = a+b;
for (i = 1; i <= v; ++i)
{
if ((a+b)%i == 0)
++k;
}
if (k <= 2)
return true;
return false;
}
void init()
{
for (int i = 1; i <= n; ++i)
vist[i] = false;
}
void calculate(int v, int m)
{
if (m == 1)
{
value[n-m+1] = v;
if (IsLegal(v, 1))
{
int i;
for (i = 1; i < n; ++i)
printf("%d ", value[i]);
printf("%d/n", value[n]);
}
}
else
{
vist[v] = true;
value[n-m+1] = v;
for (int i = 1; i <= n; ++i)
{
if (!vist[i]&&IsLegal(v, i))
calculate(i, m-1);
}
vist[v] = false;
}
}
int main(int argc, char* argv[])
{
int k = 0;
while (scanf("%d", &n)!=EOF)
{
if (n < 0 || n > 20)
break;
printf("Case %d:/n", ++k);
init();
calculate(1, n);
printf("/n");
}
return 0;
}