前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1464: [蓝桥杯2019初赛]数的分解

1464: [蓝桥杯2019初赛]数的分解

作者头像
可爱见见
发布2020-02-26 15:43:15
7000
发布2020-02-26 15:43:15
举报
文章被收录于专栏:卡尼慕卡尼慕

题目

把2019分解成3个各不相同的正整数之和,并且要求每个正整数都不包含数字2和4,一共有多少种不同的分解方法?注意交换3个整数的顺序被视为同一种方法,例如1000+1001+18 和1001+1000+18 被视为同一种。

思路

最简单的思路就是暴力枚举法,也是一道填空题,所以代码超时也没关系,提交答案即可。按照题目要求进行判断,由于不能出现重复,a=b,a=c,b=c,同时也要保证a,b,c三个的位置互换可能会有六种情况。因此最简单的思路就是第一次循环从1-n,第二次循环从上一次循环+1开始到n,第三次是第二次+1到n,保证了位置上的无重复。当然你也可以全部列出来然后统一处以6,至于为什么除6,可以考虑一下概率论的知识,三个位置三个球一共几种摆法,也就是3×2×1=6。

代码

代码语言:javascript
复制
// 1464: [蓝桥杯2019初赛]数的分解
#include <iostream>
using namespace std;
bool judge(int num){
    while(num){
        int tmp = num % 10;
        if(tmp == 2 || tmp == 4){
            return true;
        }
        num /= 10;
    }
    return false;
}
bool check(int a, int b, int c) {
    // 有数字出现 2 和 4,或者出现重复数字,返回 0 
    if (judge(a) || judge(b) || judge(c) || 
        a == b || a == c || b == c) {
        return false;
    }
    return true;
}
int main(){
    int n = 2019;
    int count = 0;
    for(int i = 1; i < n - 1; i++){
        for(int j = i + 1; j < n - 1; j++){
            for(int k = j + 1; k < n - 1; k++){
                if(i + j + k == n){
                    count += check(i, j, k);
                }
            }
        }
    }
    cout<<count;
    return 0;
} 
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卡尼慕 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档