7.1.1简单枚举
除法
输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2<=n<=79.
样例输入:
62
样例输出:
79546/01238=62
94736/01528=62
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n;
int vis[10];
// 将数据转存到数组中
void digit(long long num, int *a)
{
memset(a, 0, sizeof(a));
int length=4;
long long b;
while(num)
{
b =num%10;
a[length--] = b;
num /= 10;
}
}
// 按照格式输出
void output(int *a, int *b)
{
for(int i=0; i < 5; i++)
cout << a[i];
cout << " / ";
for(int i=0; i < 5; i++)
cout << b[i];
cout <<" = " << n << endl;
}
// 判断数字的唯一性
bool onlyNum(long long num)
{
int length=0;
long long a;
while(num)
{
length++;
a = num%10;
if(!vis[a])
vis[a]=1;
else
return false;
num /= 10;
}
if(length==4)
if(!vis[0])
vis[0]=1;
else
return false;
return true;
}
int main()
{
// freopen("out.txt","w",stdout);
int a[5], b[5];
cin >> n;
memset(vis, 0, sizeof(vis));
for(int i=1234; i < 98765; i++)
{
memset(vis, 0, sizeof(vis));
if(!onlyNum(i)) continue;
long long number = n*i;
if(!onlyNum(number)) continue;
digit(i, b);
digit(number, a);
output(a, b);
}
return 0;
}