凑算式
B DEF
A + --- + ------- = 10
C GHI
(如果显示有问题,可以参见【图1.jpg】)
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
思路:对1-9进行全排列,每次排列完去判断给定的顺序是否满足条件,这里本菜鸟采用了将后面两个算式进行通分的思想(需将结果计算成浮点型,否则结果不对),先用一个minMul()函数去计算出C和GHI的最小公倍数,然后,通分计算,满足条件的话全局变量count就加一
代码如下:
import java.util.HashMap;
import java.util.Scanner;
public class Main
{
static int count=0;
public static int minMul(int a,int b) {
int mul=Integer.max(a, b);
for(int i=mul;i<=a*b;i++) {
if(i%a==0&&i%b==0)
{
mul=i;
break;
}
}
return mul;
}
public static boolean test(int a[]) {
int A=a[0],C=a[2];
double B=a[1];
double DEF=a[3]*100+a[4]*10+a[5];
double def=DEF;
int GHI=a[6]*100+a[7]*10+a[8];
double b=B;
int mul=minMul(C,GHI);
B*=(mul/C);
DEF*=(mul/GHI);
double div=A+(B+DEF)/mul;
if(div==10.0)
{
System.out.println(A+"+"+b+"/"+C+"+"+def+"/"+GHI+"="+"10");
return true;
}
else
return false;
}
public static void permutation(int a[],int k) {
if(k==a.length-1) {
if(test(a))
count++;
}
else {
for(int i=k;i<a.length;i++) {
{
int t=a[i];
a[i]=a[k];
a[k]=t;
}
permutation(a,k+1);
{
int t=a[i];
a[i]=a[k];
a[k]=t;
}
}
}
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int sum=0,flag=0;
int a[]= {1,2,3,4,5,6,7,8,9};
permutation(a,0);
System.out.println(count);
}
}
本文探讨了一种独特的数字算式谜题,通过全排列和条件判断算法,寻找1到9数字组合满足特定算式的解法。文章分享了具体的算法实现思路和代码示例,展示了如何使用最小公倍数进行通分计算,最终统计所有可能的解法数量。

736

被折叠的 条评论
为什么被折叠?



