暴力除法
题目描述
输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2<=n<=79
输入
输入包括多行,每行一个正整数n,2<=n<=79
输出
针对每个输入的n,从小到大输出该表达式,若没有表达式可以生成,则不输出。
样例输入
62
样例输出
79546/01283=62
94736/01528=62
#include<iostream>
#include<string.h>
using
namespace
std;
int
de(int
m,int
n)
{
int
x[10];
memset
(x,0,
sizeof
(x));
int
k=0;
while
(m!=0)
{
x[k++]=m%10;
m=m/10;
}
while
(n!=0)
{
x[k++]=n%10;
n=n/10;
}
for
(
int
i=0;i<10;i++)
{
for
(
int
j=i+1;j<10;j++)
{
if
(x[i]==x[j])
return
0;
}
}
return
1;
}
int
main()
{
int
n;
while
(cin>>n)
{
for
(
int
i=01234;i<=98765;i++)
{
int
j=i*n;
if
(j>1000&&j<100000)
{
if
(de(i,j)==1)
//不重复
{
if
(i<10000)
cout<<j<<
‘/‘
<<0<<i<<
‘=‘
<<n<<endl;
else
cout<<j<<‘/‘
<<i<<
‘=‘
<<n<<endl;
}
}
}
}
return
0;
}
此题着重考虑时间超限问题,不可以从头至尾依次循环
直接找到满足乘积关系的值可以大大缩小运算量,同时需要一个函数来判断是否有重复元素