为数字0~9的一个排列(可以有前导0),2≤n≤79。
样例输入:
62
样例输出:
79546 / 01283 = 62
94736 / 01528 = 62
思路:枚举0~9的所有排列?没这个必要。 只需要枚举fghij就可以算出abcde,然后判断是否
所有数字都不相同即可。 不仅程序简单,而且枚举量也从10!=3628800降低至不到1万,而且
当abcde和fghij加起来超过10位时可以终止枚举。 由此可见,即使采用暴力枚举,也是需要认
真分析问题的。
package ppt;
import java.util.Scanner;
public class Demo6 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
for(int i=0;i<=9;i++)
{
for(int j=0;j<=9;j++)
{
if(i==j)
{
continue;
}
for(int k=0;k<=9;k++)
{
if(k==i||k==j)
{
continue;
}
for(int a=0;a<=9;a++)
{
if(a==i||a==j||a==k)
{
continue;
}
for(int b=0;b<=9;b++)
{
if(b==i||b==j||b==k||b==a)
{
continue;
}
for(int c=0;c<=9;c++)
{
if(c==i||c==j||c==k||c==a||c==b)
{
continue;
}
for(int d=0;d<=9;d++)
{
if(d==i||d==j||d==k||d==a||d==b||d==c)
{
continue;
}
for(int e=0;e<=9;e++)
{
if(e==i||e==j||e==k||e==a||a==b||e==c||e==d)
{
continue;
}
for(int f=0;f<=9;f++)
{
if(f==i||f==j||f==k||f==a||f==b||f==c||f==d||f==e)
{
continue;
}
for(int g=0;g<=9;g++)
{
if(g==i||g==j||g==k||g==a||g==b||g==c||g==d||g==e||g==f)
{
continue;
}
double a1 = i*10000+j*1000+k*100+a*10+b;
double a2 = c*10000+d*1000+e*100+f*10+g;
if(a1/a2==num)
{
if((int)a2<10000)
{
System.out.println((int)a1+" / 0"+(int)a2+" = 62");
}
else
{
System.out.println((int)a1+" / "+(int)a2+" = 62");
}
}
}
}
}
}
}
}
}
}
}
}
}
}
题主并没有按照题目要求去使用简便算法,因为这道题本身不难,运算量也不大,不是特别需要简便方法,
这种方法最暴力,最简单,最易懂,
其实我是我没有看懂老师给的答案,所以只能自己去写的,enmmmmm