该题算是一个暴力大表题了,给定了最多24根火柴棍,能够构成最大的数就是9992了,直接暴力。
代码如下:
#include <cstdlib> #include <cstdio> #include <cstring> #include <map> #include <algorithm> using namespace std; int N, make[10] = {6,2,5,5,4,5,6,3,7,6}, A, B, C, cnt; int ans[30] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,8,9,6,9,29,39,38,65,88,128 }; inline void fenjie(int num, int &sum) { if (num == 0) { sum = 6; return; } sum = 0; while (num) { sum += make[num%10]; num /= 10; } } void deal() { int cnt_a, cnt_b, cnt_c; for (int i = 0; i < 9992; ++i) { fenjie(i, cnt_a); // cnt_a的初始化在函数中执行 if (cnt_a >= N) { continue; } else { // 说明有足够多的火柴棍 for (int j = 0; j <= 9992; ++j) { fenjie(j, cnt_b); if (cnt_b + cnt_a >= N) { continue; } else { fenjie(i+j, cnt_c); if (cnt_c + cnt_a + cnt_b == N) { ++cnt; } } } } } } int main() { /* for (int i = 0; i <= 24; ++i) { N = i; N -= 4; // 加号与等号各占去了4根火柴棍 cnt = 0; deal(); printf("N = %d, ans = %d\n", N+4, cnt); } */ while (scanf("%d", &N) == 1) { printf("%d\n", ans[N]); } // system("pause"); }