P1149 火柴棒等式

mac2024-10-10  55

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

注意:

加号与等号各自需要两根火柴棍

如果A≠BA≠B,则A+B=CA+B=C与B+A=CB+A=C视为不同的等式(A,B,C>=0A,B,C>=0)

nn根火柴棍必须全部用上

输入格式 一个整数n(n<=24)n(n<=24)。

输出格式 一个整数,能拼成的不同等式的数目。

输入输出样例 输入 #1 复制 14 输出 #1 复制 2 输入 #2 复制 18 输出 #2 复制 9 说明/提示 【输入输出样例1解释】

22个等式为0+1=10+1=1和1+0=11+0=1。

【输入输出样例2解释】

99个等式为:

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 代码:

#include<bits/stdc++.h> using namespace std; int x[1001] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6}, b[4];//初始定义0~9火柴棒个数, b数组存放每次可能的等式 int n, tot = 0; void search(int l)//搜索 { int i; for(i = 0; i <= 999; ++i) { if(n - x[i] >= 0)//火柴棍还够 { b[l] = i;//火柴棒数放入数组 n = n - x[i];//在总数中减去火柴棒 if(l == 3) { if(b[1] + b[2] == b[3] && n == 0) tot++;//满足等式且火柴棒用完 } else search(l + 1);//回溯 n = n + x[i];//保存之前状态 } } } int main() { int i; cin >> n; n = n - 4; for(i = 10; i <= 999; ++i) x[i] = x[i / 10] + x[i % 10]; search(1); cout << tot; return 0; }
最新回复(0)