题目:有乘法算式如下:
○○○
× ○○
------------
○○○○
○○○○
------------
○○○○○
18个○的位置上全部是素数(1、3、5或7),请还原此算式。
//题目:有乘法算式如下:
/*○○○
× ○○
------------
○○○○
○○○○
------------
○○○○○
18个○的位置上全部是素数(1、3、5或7),请还原此算式。*/
//by as1138 2011-10-10
#include <iostream>
using namespace std;
bool pan1(int tt);
bool pan2(int tt);
bool pan3(int tt);
bool panSu(int tt);
int iSu[4] = {2,3,5,7};
int main(void)
{
int i,j,k,m,n;
int sum,tem,t1,t2;
for (i=0;i!=4;++i)
for (j=0;j!=4;++j)
for(k=0;k!=4;++k)
{
tem = iSu[i]*100+iSu[j]*10+iSu[k];
for(m=0;m!=4;++m)
{
t1 = tem*iSu[m];
if (t1>=1000&&pan1(t1))
{
for (n=0;n!=4;++n)
{
t2 = tem*iSu[n];
if(t2>=1000&&pan2(t2))
{
sum = t1+ t2*10;
if(sum>=10000&&pan3(sum))
{
cout<<" "<<iSu[i]<<iSu[j]<<iSu[k]<<endl;
cout<<"*"<<" "<<iSu[n]<<iSu[m]<<endl;
cout<<"_____________"<<endl;
cout<<" "<<t1<<endl;
cout<<t2<<endl;
cout<<"_____________"<<endl;
cout<<sum<<endl;
}
}//end if(t2...)
}//end for n
}//end if(t1...)
}//end for m
}//end for k
return 0;
}
bool panSu(int tt)
{
for (int i=0;i!=4;++i)
{
if(tt == iSu[i])
return true;
}
return false;
}
bool pan1(int tt)
{
int t;
t = tt%10;
if(!panSu(t))
return false;
tt /= 10;
t = tt%10;
if(!panSu(t))
return false;
tt /= 10;
t = tt%10;
if(!panSu(t))
return false;
tt /= 10;
t = tt%10;
if (!panSu(t))
return false;
return true;
}
bool pan2(int tt)
{
int t;
t = tt%10;
if(!panSu(t))
return false;
tt /= 10;
t = tt%10;
if(!panSu(t))
return false;
tt /= 10;
t = tt%10;
if(!panSu(t))
return false;
tt /= 10;
t = tt%10;
if(!panSu(t))
return false;
return true;
}
bool pan3(int tt)
{
int t;
t = tt%10;
if(!panSu(t))
return false;
tt /= 10;
t = tt%10;
if(!panSu(t))
return false;
tt /= 10;
t = tt%10;
if(!panSu(t))
return false;
tt /= 10;
t = tt%10;
if(!panSu(t))
return false;
tt /= 10;
t = tt%10;
if(!panSu(t))
return false;
return true;
}