-
给你n根火柴棒,你可以拼出多少个形如 “A + B = C” 的等式?等式中的A、B、C是用火柴棒拼出的整数(若该数非零,则最高位不能是0)。用火柴棒拼数字0-9的拼法如图所示。 注意: 1. 加号与等号各自需要2根火柴棒 2. 如果A ≠ B,则A + B = C与B + A = C视为不同的等式(A、B、C ≥ 0) 3. n根火柴棒必须全部用上
-
输入格式
共一行,有一个整数n(n ≤ 24)。
-
输出格式
共一行,有一个整数,表示能拼成的不同等式的数目。
- 代码:
-
#include<stdio.h> int main() { //0-911对应的火柴数, 前10个(0-9)已知 int sticks[912] = { 6, 2, 5, 5, 4, 5, 6, 3, 7, 6 };//局部初始化,剩余元素为0 //建立数组 计算1-911对应的火柴棒个数 for(int i = 10; i <= 911; i++ ) { int sum = 0, A = i; //while循环前的状态, while(A) { sum += sticks[A % 10]; //取余(个位)数对应的火柴杆 A /= 10; //截掉个位 } sticks[i] = sum; } int n = 0; scanf("%d", &n); n -= 4; //+ = 固定消耗的4根火柴 int sumEQ = 0; //成立的等式统计数 for(int a = 0; a <= 911; a++) { if(sticks[a] >= n) continue; 因为1-911对应的火柴棒个数没有规律 需要逐个寻找 for(int b = 0; b <= a; b++) { if(a + b > 911) break; if((sticks[a] + sticks[b] + sticks[a+b]) == n) { sumEQ += (a == b) ? 1 : 2; //a=b时 只有1个 否则可以通过换位置换成两个 } } } printf("%d", sumEQ); return 0; }
程序设计:查表法——火柴棒问题
最新推荐文章于 2024-07-18 16:42:53 发布