目录
一、题目要求:
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
把 2019分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法?
注意交换 3个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
二、解题思路:
- 用两个for循环,分别给i和j赋值,而k等于2019-i-j
- 用if语句判断是否符合每个正整数都不包含数字 2 和 4,其中功能用check函数实现
- 注意要判断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;
}
这位靓仔不关注一下?
让这个有点不错的作者保肝下一期~~~~~~~~~