欧拉计划32题

来源:互联网 发布:淘宝店营销策划方案 编辑:程序博客网 时间:2024/06/06 09:46

如果一个n位数使用了1到n中每个数字且只使用了一次,我们称其为pandigital。例如,15234这个五位数,是1到5pandigital的。

7254是一个不寻常的数,因为:39 × 186 = 7254这个算式的乘数,被乘数和乘积组成了一个1到9的pandigital组合。

找出所有能够组合成1到9pandigital的乘法算式中乘积的和。

提示: 有的乘积数字能够被多个乘法算式得到,所以在计算时要记得只计算它们一次。

#include<iostream>using namespace std;int number=0;void g(int a[],int m,int n){    if(m==n&&a[0]<a[m])return;    int i,t1,t2,t3;    t1=t2=t3=0;    for(i=0;i<m;i++)t1=t1*10+a[i];    for(i=m;i<m+n;i++)t2=t2*10+a[i];    for(i=m+n;i<9;i++)t3=t3*10+a[i];    if(t1*t2==t3)    {        number+=t3;        //cout<<t1<<"\t"<<t2<<"\t"<<t3<<endl;    }}void f(int a[],int n){    if(n==9)    {        for(int i=1;i<3;i++)        {            for(int j=i;j<=9-i-j;j++)            {                int k=9-i-j;                if(i+j-1<=k&&k<=i+j)g(a,i,j);            }        }        return;    }    for(int i=n;i<9;i++)    {        {int t=a[n];a[n]=a[i];a[i]=t;}        f(a,n+1);        {int t=a[n];a[n]=a[i];a[i]=t;}    }}int main(){    int a[9]={1,2,3,4,5,6,7,8,9};    f(a,0);    cout<<number<<endl;    system("pause");    return 0;    }


0 0
原创粉丝点击