首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

九宫格有关问题

2012-03-12 
九宫格问题问题:用户输入一个N(N大于9) 在1到N间选九个不同数字,使得任意相邻数和为质数,穷举所有可能性并

九宫格问题
问题:用户输入一个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;} 

热点排行