欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

cometoj—C0066 [2008提高组-B]火柴棒等式

程序员文章站 2024-03-24 16:36:28
...

题目描述

给你 n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的 A、B、C 是用火柴棍拼出的整数(若该数非零,则最高位不能是 0)。用火柴棍拼数字 0-9 的拼法如图所示:

cometoj—C0066 [2008提高组-B]火柴棒等式

注意:

加号与等号各自需要两根火柴棍
如果 A !=B,则 A+B=C 与 B+A=C 视为不同的等式(A、B、C≥0)
n 根火柴棍必须全部用上

输入描述

共一行,有一个整数)n(n≤24)。

输出描述

共一行,表示能拼成的不同等式的数目。

样例输入 1

14
样例输出 1

2
样例输入 2

18
样例输出 2

9
提示

【输入输出样例1解释】

2 个等式为 0+1=1 和 1+0=1。

【输入输出样例2解释】

9个等式为:

0+4=4
0+11=11
1+10=11
2+2=4
2+7=9
4+0=4
7+2=9
10+1=11
11+0=11

思路:
本题给出提示最多给出24根火柴棒,减去加号等号后最多有20根,and其中拼出1的火柴所需是最少的,所以我们最多可以拼出1111+11=1111,所以A和B的极限值我们认定为1111(可以更小),进行枚举即可获得答案,代码如下:

import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner read = new Scanner(System.in);
		int n = read.nextInt()-4;//扣除加号和等号的火柴
		int[] a = {6,2,5,5,4,5,6,3,7,6};
		int answer = 0;
		for(int i=0;i<=1111;i++)
			for(int j=0;j<=1111;j++)
			{
				int sum = 0;//判断这个数字要用多少火柴
				int c = i+j;
				String str = i+""+j+""+c;
				for(int k=0;k<str.length();k++)
				{
					sum += a[Integer.valueOf(String.valueOf(str.charAt(k)))];
				}
				if(sum == n)
				{
					answer += 1;
				}
			}
		System.out.println(answer);
		read.close();
	}

}