简单枚举 暴力啊

输入正整数 n , 按从大到小的顺序输出所有形如 abcde/fghij = n 的表达式,其中a ~ j为0 ~ 9的数字(不可重复)。2 <= n <=79.

样例输入:
62

样例输出:
79546/01283 = 62
94736/01528 = 62

、、、、、、、、、、、、、、、、、、、、

#include<iostream>
#include<iomanip>
using namespace std;

int findstartvalue(int m)//求的第一个是m的倍数的5位数
{
 int m1=m*1234;
 int m2=(1234/m+1)*m;;//防止m很小
 return m1>m2? m1:m2;

}
bool check(int m0,char flag[10])
{
 for(int k=0;k<5;k++)//不可以用while(m0>0)因为这样如果除数中有0就测不出来了
 {
  if((++flag[m0])>1)
   return false;
  m0/=10;
 }
 return true;
}
void foo(int m)
{
 int m0=findstartvalue(m);
 for(;m0<98766;m0+=m)//m0的最大数是98765
 {
  char flag[10]={0};
  if(check(m0,flag)==false)continue;//检查被除数
  if(check(m0/m,flag)==false)continue;//检查除数
 cout<<m0<<'/'<<setw(5)<<setfill('0')<<m0/m<<'='<<m<<endl;
 }
}
int main()
{
 int m;
while(scanf("%d",&m)==1)

{
 foo(m);
 cout<<endl;

}
 return 0;
}
View Code

 

posted on 2013-07-11 15:45  Forgiving  阅读(124)  评论(0编辑  收藏  举报