题解:P1149 [NOIP 2008 提高组] 火柴棒等式

· · 题解

前言

蒟蒻制作不易,求管理员通过。

思路

先将拼出数字零到九需要用到的火柴根数存进 s 数组里。再写一个函数,返回值是所用火柴根数的和。假设进入函数的这个数小于十,那么直接返回,否则将这个的每一位都拆开,判断每一位要用的根数,最后相加。

最后在主函数里循环判断,如满足条件,则等式成立,答案加一。

AC代码

#include<bits/stdc++.h>
using namespace std;

int s[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
int n, ans;

int sl(int x){
    int sum = 0;
    if(x < 10){
        sum = s[x];
    }
    else{
        int t;
        t = x;
        while(t != 0){
            sum += s[t % 10];
            t /= 10;
        }
    }
    return sum;
}
int main(){
    cin >> n;
    for(int i = 0;i <= 1000;i++){
        for(int j = 0;j <= 1000;j++){
            if(sl(i) + sl(j) + sl(i + j) == n - 4){
        //若满足此条件,则等式成立
                ans++;
            }
        }
    }
    cout << ans << "\n";
    return 0;
}

有错误请大佬指出!