由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
请填写该数字,通过浏览器提交答案,不要填写多余内容(例如:列出所有算式)。
有两个限制条件:
1、不能有重复的数字。
2、每个数字只能出现两次。
#include <iostream>
#include <cstring>
using namespace std;
int vis[10];
int bk[10];
int check(int x, int y)
{
do
{
if(vis[x % 10] == 0)
{
return 0;
}
vis[x % 10]--;
}
while(x /= 10);
do
{
if(vis[y % 10] == 0)
{
return 0;
}
vis[y % 10]--;
}
while(y /= 10);
return 1;
}
int check4(int x)
{
do
{
if(vis[x % 10] != 0)
{
return 0;
}
vis[x % 10]++;
}
while(x /= 10);
return 1;
}
int main(void)
{
int cnt = 0;
for(int i = 1023; i <= 9876; i++)
{
memset(vis, 0, sizeof(vis));
if(!check4(i))
{
continue;
}
memcpy(bk, vis, sizeof(bk));
for(int j = 1; j <= 98; j++)
{
memcpy(vis, bk, sizeof(bk));
if(i % j != 0)
{
continue;
}
int k = i / j;
if(j > k)
{
continue;
}
if(!check(j, k))
{
continue;
}
cout << j << " * " << k << " = " << i << endl;
cnt++;
}
}
cout << cnt << endl;
}