蓝桥杯真题——凑算式

本文探讨了一种独特的数字算式谜题,通过全排列和条件判断算法,寻找1到9数字组合满足特定算式的解法。文章分享了具体的算法实现思路和代码示例,展示了如何使用最小公倍数进行通分计算,最终统计所有可能的解法数量。


凑算式

     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);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值