标题:神奇算式

由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。

比如:

210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187

都符合要求。

如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。

请填写该数字,通过浏览器提交答案,不要填写多余内容(例如:列出所有算式)。

 

#include <algorithm>
#include <cstdio>
using namespace std;
int vis[9999]={0};
bool Compare(int rec,int A, int B)
{
    int a[5], b[5];
    int cnt=0;
    while(rec){a[cnt++]=rec%10; rec/=10;}
    int tot=0;
    while(A){b[tot++]=A%10; A/=10;}
    while(B){b[tot++]=B%10; B/=10;}
    sort(a, a+cnt);
    sort(b, b+tot);
    int  i;
    for(i=0; i<cnt; i++) if(a[i]!=b[i]) break;
    if(i==cnt) return true;
    else return false;
}
int main()
{
    int t=0;
    for(int i=1; i<=9; i++)
  {
for(int j=1; j<=9; j++) { for(int k=0; k<=9; k++) { for(int o=0; o<=9; o++) { if(j!=k && j!=o && k!=o && i!=j && i!=k && i != o) { int sum=j*100+k*10+o; int Q=i*sum; if(Q>=1000&&Q<=9999) { if(Compare(Q, sum, i)&& (!vis[sum] || !vis[i])) { vis[sum]=1; vis[i]=1; t++; printf("%d %d\n", i, sum); } } } } } } }  for(int i=1; i<=9; i++) { for(int j=0; j<=9; j++) { for(int k=1; k<=9; k++) { for(int o=0; o<=9; o++) { if(j!=k && j!=o && k!=o && i!=j && i!=k && i != o) { int sum1=i*10+j; int sum=k*10+o; int Q=sum1*sum; if(Q>=1000&&Q<=9999) { if(Compare(Q, sum, sum1)&& (!vis[sum] || !vis[sum1])) { vis[sum]=1; vis[sum1]=1; t++; printf("%d %d\n", sum1, sum); } } } } } } } printf("%d\n", t); return 0; }

 

posted on 2016-03-19 20:12  cleverbiger  阅读(236)  评论(0编辑  收藏  举报