您的位置:首页 > 其它

蓝桥杯 历届试题 神奇算式

2017-03-12 22:57 197 查看
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int k=0;
int kk=0;
void f(int *ia,int sum ,int q)
{
int a[4]={0};
int v[4]={0};

for(int i=0;i<4;i++)
{
a[i]=sum%10;
sum/=10;
}

if(ia[0]!=ia[1]&&ia[1]!=ia[2]&&ia[2]!=ia[3]&&ia[0]!=ia[2]&&ia[0]!=ia[3]&&ia[1]!=ia[3]);

else return;

for(i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(a[i]==ia[j])
{
v[j]++;
if(v[j]>1)
return ;
}
}
}

if((v[0]+v[1]+v[2]+v[3]) != 4)
return ;
else
{
if(q==0)
{printf("%d*%d %d %d\n",ia[0],ia[1],ia[2],ia[3]);
k++;
}
if(q==1)
{printf("%d %d*%d %d\n",ia[0],ia[1],ia[2],ia[3]);
kk++;
}
}

}
int main()
{
int ia[10]={0,1,2,3,4,5,6,7,8,9};
int ib[4]={0};

do
{
if(ib[0]!=ia[0]||ib[1]!=ia[1]||ib[2]!=ia[2]||ib[3]!=ia[3])
{
ib[0]=ia[0];
ib[1]=ia[1];
ib[2]=ia[2];
ib[3]=ia[3];

if(ia[0]!=0&&ia[1]!=0&&(ib[0])*(ib[1]*100+ib[2]*10+ib[3])>=1000&&(ib[0])*(ib[1]*100+ib[2]*10+ib[3])<=9999)
{

f(ib,(ib[0])*(ib[1]*100+ib[2]*10+ib[3]),0);
}
if(ia[0]!=0&&ia[2]!=0)
{

if((ib[0]*10+ib[1])*(ib[2]*10+ib[3])>=1000&&(ib[0]*10+ib[1])*(ib[2]*10+ib[3])<=9999)
f(ib,(ib[0]*10+ib[1])*(ib[2]*10+ib[3]),1);
}
}

}while(next_permutation(ia,ia+10));
printf("%d\n",k+kk/2);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: