Skip to content

11381: 【原1381】畅畅的牙签

题目

题目描述

author: SamJia 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/1381

题目描述

最近畅畅买了一包牙签,共有n条,但是他比较无chǐ,所以他只能无聊地用牙签来拼一些奇怪的东西自娱自乐了。

最终他想到了用这些牙签来拼一些格式为A-B=C等式,而且每次都还要用上所有牙签,因为脑子瓦特了,他已经数不过来有多少了,所以请你帮他计算一下一共能拼出多少个这样的等式。

说明

  1. 减号需要一根牙签,等号需要两根牙签

  2. 等式中的A、B、C是用牙签拼出的整数(若该数非零,则最高位不能是0)

  3. A、B、C均为非负数,即A>=B>=0

  4. 每种数字所需牙签数请参考七位数码管显示方法,例如数字1需要2根牙签,数字2需要5根牙签。

输入格式

输入只有一行,有一个数字,表示牙签总数n(n<=23)

输出格式

输出一个整数,表示能拼出的等式总数。

Sample Input

13

Sample Output

2

样例解释

两个等式:1-0=1,1-1=0

yyong119's solution

#include <iostream>
using namespace std;

//const int num[10] = { 6, 2, 5, 5, 4, 5, 6, 3, 7, 6 };
const int dataa[24] = {0,0,0,0,0,0,0,0,0,0,0,0,1,2,8,9,6,9,29,39,38,65,88,128};
int main() {

//  ios::sync_with_stdio(false);
//  int n, total = 0;
    int n;
    cin >> n;
/*  n -= 3;
    for (int i = 0; i < 999; ++i)
        for (int j = 0; j <= i; ++j) {
            int rest = n - 3, c = i - j, a = i, b = j;
            do {
                rest -= num[a % 10];
                a /= 10;
            } while (a);
            do {
                rest -= num[b % 10];
                b /= 10;
            } while (b);
            do {
                rest -= num[c % 10];
                c /= 10;
            } while (c);
            if (rest == 0) {
                ++total;
            }
        }
    cout << total << endl;
*/
    cout << dataa[n] << endl;
    return 0;
}