HUT-1674 火柴棒等式

该题算是一个暴力大表题了,给定了最多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");

}

你可能感兴趣的:(T)