【题目】输入正整数n,按从小到大的顺序输出所有形如abcde/fghij = n的表达式,其中a~j恰好为数字0~9的一个排列,n为2~79;
Sample Input
61
62
0
Sample Output
There are no solutions for 61.
79546 / 01283 = 62
94736 / 01528 = 62
【分析】使用暴力枚举的方法,只需简单枚举fghij即可由于乘积不能超过100000,所以上限是100000/n,然后判断是否所有的数字都用过。
【代码】
#include<cstdio>
#include<cstring>
int visit[10] = { 0 };
bool judge(int a, int b)
{
if (b > 98765)return 0;
memset(visit, 0, sizeof(visit));
//判断是否有重复元素的方法
if (a < 10000)
visit[0] = 1;
while (a != 0)
{
visit[a % 10] = 1;
a /= 10;
}
while (b != 0)
{
visit[b % 10] = 1;
b /= 10;
}
for (int i = 0; i < 10; i++)
{
if (visit[i] == 0)
return false;
}
return true;
}
int main()
{
int n;
bool flag = true;
scanf("%d", &n);
for (int i = 1234; i < 100000; i++)
{
if (judge(i, i*n))
{
printf("%05d/%05d=%d\n", i*n, i, n);
flag = false;
}
}
if (flag)
printf("There are no solutions\n");
return 0;
}