九宫格问题
问题:用户输入一个N(N大于9) 在1到N间选九个不同数字,使得任意相邻数和为质数,穷举所有可能性并且考虑对称问题!
#include <iostream.h>
void main()
/*按照这个顺寻来 ,暂时不考虑对称问题
a b c
d e f
g h i
*/
{
int a,b,c,d,e,f,g,h,i,n;
cout<<"请输入一个最大整数N(N>9):";
cin>>n;
for(a=1;a<=n;a++)
{
for(b=1;b<=n;b++)
{
{if(b==a) continue;}
for(c=1;c<=n;c++)
{
{if(a==c||c==b) continue;}
for(d=1;d<=n;d++)
{
{if(a==d||d==b||d==c) continue;}
for(e=1;e<=n;e++)
{
{if(a==e||e==b||e==c||e==d) continue;}
for(f=1;f<=n;f++)
{
{if(a==f||f==b||f==c||f==d||f==e) continue;}
for(g=1;g<=n;g++)
{
{if(a==g||g==b||g==c||g==d||g==e||g==f) continue;}
for(h=1;h<=n;h++)
{
{if(a==h||h==b||h==c||h==d||h==e||h==f||h==g) continue;}
for(i=1;i<=n;i++)
{
if(a==i||i==b||i==c||i==d||i==e||i==f||i==g||i==h) continue;
int a1;
bool ab,ad,bc,be,cf,de,ef,dg,eh,fi,gh,hi;//相邻
for(a1=2;a1<a+b/2;a1++)
{
if((a+b)%a1!=0) {ab=true;break;}
else continue;
}
for(a1=2;a1<a+d/2;a1++)
{
if((a+d)%a1!=0) {ad=true;break;}
else continue;
}
for(a1=2;a1<b+c/2;a1++)
{
if((b+c)%a1!=0) {bc=true;break;}
else continue;
}
for(a1=2;a1<e+b/2;a1++)
{
if((e+b)%a1!=0) {ab=true;break;}
else continue;
}
for(a1=2;a1<e+d/2;a1++)
{
if((e+d)%a1!=0) {ad=true;break;}
else continue;
}
for(a1=2;a1<f+c/2;a1++)
{
if((f+c)%a1!=0) {bc=true;break;}
else continue;
}
for(a1=2;a1<e+f/2;a1++)
{
if((e+f)%a1!=0) {ab=true;break;}
else continue;
}
for(a1=2;a1<g+d/2;a1++)
{
if((g+d)%a1!=0) {ad=true;break;}
else continue;
}
for(a1=2;a1<f+i/2;a1++)
{
if((f+i)%a1!=0) {bc=true;break;}
else continue;
}
for(a1=2;a1<e+h/2;a1++)
{
if((e+h)%a1!=0) {ab=true;break;}
else continue;
}
for(a1=2;a1<g+h/2;a1++)
{
if((g+h)%a1!=0) {ad=true;break;}
else continue;
}
for(a1=2;a1<h+i/2;a1++)
{
if((h+i)%a1!=0) {bc=true;break;}
else continue;
}
if(ab==ad==bc==be==cf==de==ef==dg==eh==fi==gh==hi==true)
{
cout<<"*******************"<<endl;
cout<<a<<" "<<b<<" "<<c<<endl;
cout<<"*******************"<<endl;
cout<<d<<" "<<e<<" "<<f<<endl;
cout<<"*******************"<<endl;
cout<<g<<" "<<h<<" "<<i<<endl;
cout<<"*******************"<<endl;
cout<<endl;
cout<<endl;
cout<<endl;
}
}
}
}
}
}
}
}
}
}
}
哪位大神帮我修改下 得出正确结果,感激!
[解决办法]
楼主,答案如下:
- C/C++ code
#include <iostream.h>// written by cc_teambool isPrime(int n){ if(n <= 1) return false; if(n == 2 || n == 3 || n == 5 || n == 7) return true; for(int i = 2; i <= n / 2; ++i) { if(n % i == 0) return false; } return true;}int main()/*按照这个顺寻来 ,暂时不考虑对称问题 a b c d e f g h i */{ int a,b,c,d,e,f,g,h,i,n; bool ab,ad,bc,be,cf,de,ef,dg,eh,fi,gh,hi;//相邻 ab = ad = bc = be = cf = de = dg = ef = eh = fi = gh = hi = false; cout<<"请输入一个最大整数N(N>9):"; cin>>n; for(a=1;a<=n;a++) { cout << endl; for(b=1;b<=n;b++) { if(b == a || !isPrime(a + b)) continue; for(c=1;c<=n;c++) { if(a==c || c==b || !isPrime(b + c)) continue; for(d=1;d<=n;d++) { if(a==d||d==b||d==c || !isPrime(a + d)) continue; for(e=1;e<=n;e++) { if(a==e||e==b||e==c||e==d || !isPrime(b + e) || !isPrime(d + e)) continue; for(f=1;f<=n;f++) { if(a==f||f==b||f==c||f==d||f==e || !isPrime(c + f) || !isPrime(e + f)) continue; for(g=1;g<=n;g++) { if(a==g||g==b||g==c||g==d||g==e||g==f || !isPrime(d + g)) continue; for(h=1;h<=n;h++) { if(a==h||h==b||h==c||h==d||h==e||h==f||h==g || !isPrime(e + h) || !isPrime(g + h)) continue; for(i=1;i<=n;i++) { if(a==i||i==b||i==c||i==d||i==e||i==f||i==g||i==h || !isPrime(f + i) || !isPrime(h + i)) continue; cout << "ok: " << a << " " << b << " " << c << " " << d << " " << e << " " << f << " " << g << " " << h << " " << i << " " << endl; /* if(ab==ad==bc==be==cf==de==ef==dg==eh==fi==gh==hi==true) { cout<<"*******************"<<endl; cout<<a<<" "<<b<<" "<<c<<endl; cout<<"*******************"<<endl; cout<<d<<" "<<e<<" "<<f<<endl; cout<<"*******************"<<endl; cout<<g<<" "<<h<<" "<<i<<endl; cout<<"*******************"<<endl; cout<<endl; cout<<endl; cout<<endl; } */ } } } } } } } } } return 0;}