枚举_火柴棍算法问题_Java实现

参考《啊哈算法》
问题:
现在有n根火柴棍,拼出A+B=C的等式。
注意:加号和等号各自需要两根火柴棍,A不等于B,则A+B=C与B+A=C是为不同的等式,所有火柴棍必须都用上
思路:
这道题的主要难点就是怎么用数字将所需的火柴棍表示出来,之前了解过桶排序的就好解决了,写一个数字,用内容对应下标,比如0需要6根火柴那么arr[0]={6},茅厕顿开了吧
代码:


import java.util.Scanner;

public class 火柴棍 {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        int n=input.nextInt();
        int sum=0;
        int c;
        for (int i = 0; i < 1111; i++) {
        //1111这个数与N的大小有关,可以写个方法算出来,这边就默认N在20之内,给估一个值
            for (int j = 0; j < 1111; j++) {
                c=i+j;
                if (count(i)+count(j)+count(c)==n-4){
                    System.out.println(i+"+"+j+"="+c);
                    sum++;
                }
            }
        }
        System.out.println(sum+"个数");
    }
    public static int count(int x){
        int num=0;
        int[] arr={6,2,5,5,4,5,6,3,7,6};//数组判断,下标代表数,对应下标的值代表返回个数
        while (x/10!=0){//如果不是个位数进入循环
            num+=arr[x%10];//记录个位数的火柴数
            x/=10;//去掉个位
        }
        num+=arr[x];//最高位
        return num;
    }
}

以上

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值