蓝桥杯——数的分解

221 阅读1分钟

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

把 20192019 分解成 33 个各不相同的正整数之和,并且要求每个正整数都不包含数字 22 和 44,一共有多少种不同的分解方法?

注意交换 33 个整数的顺序被视为同一种方法,例如 1000+1001+181000+1001+18 和 1001+1000+181001+1000+18 被视为同一种。

思路:三个数不能重复出现,那直接让三个数按顺序排好 i,j,2019-i-j,三者从大到小,再分别用check判断一下就行

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
int check(int a)
{
    int t,i;
    while(a>0)
    {
        t=a%10;
        a/=10;
        if(t==2||t==4)
        return 0;
    }
    return 1;
}
int main()
{
    int n=2019;
    int cnt=0,i,j,k,l;
    for( i=1;i<=2019;i++)
    {
        if(check(i)){
                    
        for(j=i+1;j<2019-i-j;j++)
        {
            
            if(check(j)&&check(2019-i-j))
            cnt++;
            
            }
            
            }


    }
    printf("%d",cnt);

    return 0;
}