超详细!算法练习题02---蓝桥杯省赛“数的分解”

该编程问题要求找出所有将2019分解为三个不相同且不含数字2和4的正整数的方法。通过两个嵌套循环遍历可能的组合,并使用check函数验证条件,计算出符合条件的分解总数。
摘要由CSDN通过智能技术生成

目录

一、题目要求:

二、解题思路:

三、代码实现:


一、题目要求:

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

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

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

运行限制

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

二、解题思路:

  1. 用两个for循环,分别给i和j赋值,而k等于2019-i-j
  2. 用if语句判断是否符合每个正整数都不包含数字 2 和 4,其中功能用check函数实现
  3. 注意要判断i,j,k要存在,即不等于0

三、代码实现:

#include <iostream>
using namespace std;
typedef long long ll;

bool check(ll x){//check函数检查是否符合i,j,k是否为2或者4
    if(x <=0 ) return false;//首先的x要大于0,如果三个数字都要存在
    while(x){//当出现多位数,用下面把每一位的数字拆分出来
      int now = x % 10;//取出个位数,用于比较
      if(now==2 || now==4) return false;//如果取出的数字出现2或者4,则说明不符合
      x /= 10;//把十位数变到个位数上
    }
    return true;

}
int main()
{ int ans=0;
  for(int i=1 ; i< 2019 ; i++)//设置三个数从0-2019循环,第一个数i
    for(int j=1; j<2019 ; j++){//第二个数j
        int k = 2019 - i - j;//第三个数k
        if(check(i) && check(j) && check(k) && i>j && j>k)/*用check函数检查是否符合i,j,k是否为2或者4
        不符合条件则,分解方法ans加1种,同时i、j、k依次递减,防止出现同一种情况*/
          ans++;
        }
  printf("%d",ans);
  
  return 0;
}

这位靓仔不关注一下?

                        让这个有点不错的作者保肝下一期~~~~~~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值