题解:B4283 [蓝桥杯青少年组省赛 2022] 分成整数

· · 题解

思路

这一题需要用到枚举思想。

我们可以枚举 i,j,设 k=N-i-j,若 i,j,k 各个数位都不包含 37,累加计数器。

首先,要保证 i,j,k 都是正整数,所以,i 应该在 1 \sim n 之间,这不用多说。而 j 应该在 1 \sim i-1 之间,否则,k 就会变为负数或 0

那如何判断它们的各个数位都不包含 37 呢?因为本题的 N < 501i,j,k 都不会超过百位,所以,我们只要判断它们的个位、十位、百位是不是 37 即可。

代码

#include <bits/stdc++.h>
using namespace std;
bool is(int n){
    if(n%10==3||n%10==7||n/10%10==3||n/10%10==7||n/100==3||n/100==7) return 0;
    return 1;
}

int main(){
    int n,cnt=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        for(int j=1;j<n-i;j++){
            int k=n-i-j;
            if(is(i)&&is(j)&&is(k)&&i!=j&&i!=k&&j!=k){
                cnt++;
            }
        }
    }
    printf("%d",cnt/6);
    return 0;
}