蓝桥杯凑算式--注意精度问题

2016第三题

凑算式
       B      DEF
A + — + -——— = 10
       C       GHI
(如果显示有问题,可以参见【图1.jpg】)
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。

这个算式一共有多少种解法?

分析:这个题很简单,就是爆搜即可,但是要注意精度问题,太坑了!!

我先贴上一段测试的代码:

public class test {

	public static void main(String[] args) {
		int c = 6;
		double a = 8*1.0/3;
		double b =952*1.0/714;
		System.out.println(a+" + "+b+" = "+(a+b));
		double sum = c+a+b;
		System.out.println(sum);
		if(sum==10)
		   System.out.println("yes");
		else
		  System.out.println("no");
	}

}

自己运行一下就可以发现:两个浮点类型相加的结果的形式。那么这个题判断的时候也要注意了,看代码:

public class Main {
    static  Scanner in = new Scanner(System.in);
    static int[] a = new int[10];
    static boolean[] vis = new boolean[10];
    static int ans = 0;
    static void dfs(int sp) {
    	if(sp==9) {
    		 int c = a[3]*100+a[4]*10+a[5];
    		 int d = a[6]*100+a[7]*10+a[8];
    	     double t1 = a[1]*1.0/a[2];//注意这里
    	     double t2 = c*1.0/d;
    		  if(a[0]+t1+t2==10)
    			 ans++; 
    		return;
    	}
    	for(int i = 1;i <= 9;i++) {
    		if(!vis[i]) {
    			vis[i] = true;
    			a[sp] = i;
    			dfs(sp+1);
    			vis[i] = false;
    		}
    	}
    }
    public static void main(String args[]){
    	Arrays.fill(vis, false);
         dfs(0);       
    	System.out.println(ans);
    } 

}

以后一定要注意了,不然很容易出错。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值