11381: 【原1381】畅畅的牙签
题目
题目描述
author: SamJia 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/1381
题目描述
最近畅畅买了一包牙签,共有n条,但是他比较无chǐ,所以他只能无聊地用牙签来拼一些奇怪的东西自娱自乐了。
最终他想到了用这些牙签来拼一些格式为A-B=C等式,而且每次都还要用上所有牙签,因为脑子瓦特了,他已经数不过来有多少了,所以请你帮他计算一下一共能拼出多少个这样的等式。
说明
-
减号需要一根牙签,等号需要两根牙签
-
等式中的A、B、C是用牙签拼出的整数(若该数非零,则最高位不能是0)
-
A、B、C均为非负数,即A>=B>=0
-
每种数字所需牙签数请参考七位数码管显示方法,例如数字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;
}