小提示:部分题目的图形有偏移现象;解决办法为,将题目拷贝到记事本,字体设置为‘Fixedsys’。
(编译环境:windowsXP_sp3 + Visual_C++_2008,保证编译成功,正常运行。)
11. 巧排数字。将1、2、...、20这20个数排成一排,使得相邻的两个数之
和为一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。
代码如下:
#include<iostream>
using namespace::std;
void main()
{
bool IsPrimeNumber(int z);
/*
定义10个变量a,b,c,d,e,f,g,h,i,j,k,l,m,n(20个数太多,此处以10个为例)
根据题目可知,首位变量的数值并不会影响结果,因此我们定义a为1
*/
int a, b, c, d, e, f, g, h, i, j;
a=1;
int M=0;
for(b=2;b<=10;b++)
if(!(IsPrimeNumber(b+a)))
continue;
else
for(c=2;c<=10;c++)
if(!(IsPrimeNumber(c+b))||(c==b))
continue;
else
for(d=2;d<=10;d++)
if(!(IsPrimeNumber(d+c))||(d==b)||(d==c))
continue;
else
for(e=2;e<=10;e++)
if(!(IsPrimeNumber(e+d))||(e==b)||(e==c)||(e==d))
continue;
else
for(f=2;f<=10;f++)
if(!(IsPrimeNumber(f+e))||(f==b)||(f==c)||(f==d)||(f==e))
continue;
else
for(g=2;g<=10;g++)
if(!(IsPrimeNumber(g+f))||(g==b)||(g==c)||(g==d)||(g==e)||(g==f))
continue;
else
for(h=2;h<=10;h++)
if(!(IsPrimeNumber(h+g))||(h==b)||(h==c)||(h==d)||(h==e)||(h==f)||(h==g))
continue;
else
for(i=2;i<=10;i++)
if(!(IsPrimeNumber(i+h))||(i==b)||(i==c)||(i==d)||(i==e)||(i==f)||(i==g)||(i==h))
continue;
else
for(j=2;j<=10;j++)
if(!(IsPrimeNumber(j+i))||!(IsPrimeNumber(j+a))||(j==b)||(j==c)||(j==d)||(j==e)||(j==f)||(j==g)||(j==h)||(j==i))
continue;
else
{
cout<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e<<" "<<f<<" "<<g<<" "<<h<<" "<<i<<" "<<j<<endl;
M++;
}
cout<<"一共有"<<M<<"组质数"<<endl;
system("pause");
}
bool IsPrimeNumber(int z)
{
if(z<2)
{
return false;
}
else if(z==2)
{
return true;
}
else
{
for(int i=2;i<z;i++)
{
if (z%i==0)
return false;
else
continue;
}
return true;
}
}