标题:神奇算式
由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 ", 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 ", sum1, sum); } } } } } } } printf("%d ", t); return 0; }