专栏文章

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

B4283题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@mipqhija
此快照首次捕获于
2025/12/03 16:17
3 个月前
此快照最后确认于
2025/12/03 16:17
3 个月前
查看原文

思路

这一题需要用到枚举思想。
我们可以枚举 i,ji,j,设 k=Nijk=N-i-j,若 i,j,ki,j,k 各个数位都不包含 3377,累加计数器。
首先,要保证 i,j,ki,j,k 都是正整数,所以,ii 应该在 1n1 \sim n 之间,这不用多说。而 jj 应该在 1i11 \sim i-1 之间,否则,kk 就会变为负数或 00
那如何判断它们的各个数位都不包含 3377 呢?因为本题的 N<501N < 501i,j,ki,j,k 都不会超过百位,所以,我们只要判断它们的个位、十位、百位是不是 3377 即可。

代码

CPP
#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;
}

评论

1 条评论,欢迎与作者交流。

正在加载评论...