阅读《啊哈,算法》时看到的一道题,题目并不难,感觉挺有意思,用java实现了一下
枚举算法(又叫穷举算法)的基本思想就是“有序的去尝试每一种可能”。
题目:小明有n根火柴棍,希望拼出形如A+B=C的等式。等式中的A,B,C均是用火柴棍拼出来的整数
(若该数非零,则最高位不能是0)。数字0-9的拼法如下图所示
程序要求:输入火柴棍的数量,输出所有满足条件的等式
import java.util.Scanner;
public class Match {
public static void main(String[] args) {
int a,b,c,sum = 0;
//读取键盘输入的总火柴棍的数量
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
//尝试a,b,c所有的可能性
//原题目是24根火柴,所以a b的范围最高到1111,可以根据自己的火柴棍总数,改变a,b的最大值
for (a = 0 ; a < 1111 ; a++){
for (b = 0 ; b < 1111 ;b++){
//先满足等式
c = a + b;
//如果a,b,c需要的火柴的数量和输入的火柴棍数量相等
// 因为+,=需要两根火柴棍,所以需要总数减四
if (sum(a) + sum(b) + sum(c) == m - 4){
//输出满足条件的结果
System.out.println(a+"+"+b+"="+c);
}
}
}
}
//统计当前数字需要多少个火柴棍可以拼成
public static int sum(int n){
int num = 0;
int parma[] = {6,2,5,5,4,5,6,3,7,6};
while(n/10 != 0){
//获得n的末尾数字
num += parma[n%10];
//去掉n的末尾数字
n /= 10;
}
//加上n的第一位
num += parma[n];
return num;
}
}