题目:0-9数字 分成 abcde/fghij=n 输入n,输出解法;
分析:暴力求解,但注意只需枚举五个数即可,这样使得10!->100000;
说明:刚开始没判断abcde是否有相同数字,后来又发现分子可能是四位数,因为我的代码只是判断了分子跟分母各个数字不一样,后来写了判断条件,分子>10000才可以,之后就一直调试格式的问题..第一组数据不换行,每组数据在开头换行,否则最后一组数据尾部多了一行!!第一次发题解..不过话说这道题花了好长时间,太笨了..加油,别人的代码真的是简洁..
#include <iostream>
#include <stdlib.h>
using namespace std;
int arr[100000][5],n,x;
int fun(int num)
{
int sig,y=x,z=x,w[5],js=0;
while(y)
{
w[js++]=y%10;
y/=10;
}
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
{
if(j!=i)
{
if(w[i]==w[j]) return 0;
}
}
while(z)
{
sig=z%10;
for(int i=0;i<5;i++)
{
if(sig==arr[num][i]) return 0;
}
z/=10;
}
return 1;
}
int main()
{
int num=0,mark=0;
while(cin>>n)
{
int flag=0;
num=0;
if(n==0) break;
if(mark) cout<<endl;
mark=1;
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
if(j!=i)
for(int k=0;k<10;k++)
{
if(k!=j&&k!=i)
for(int l=0;l<10;l++)
{
if(l!=k&&l!=j&&l!=i)
for(int m=0;m<10;m++)
{
if(m!=l&&m!=k&&m!=j&&m!=i)
{
arr[num][0]=i;
arr[num][1]=j;
arr[num][2]=k;
arr[num][3]=l;
arr[num][4]=m;
// cout<<i<<j<<k<<l<<m<<endl;
x=(arr[num][0]*10000+arr[num][1]*1000+arr[num][2]*100+arr[num][3]*10+arr[num][4])*n;
//if(x>99999) exit(0);
if(x<=99999&&x>10000&&fun(num)) {flag=1;cout<<x<<" / "<<i<<j<<k<<l<<m<<" = "<<n<<endl;}
num++;
}
}
}
}
}
}
if(!flag) cout<<"There are no solutions for "<<n<<"."<<endl;
}
}