当前位置:   article > 正文

蓝桥杯:数的分解

蓝桥杯:数的分解

题目

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

思路

循环遍历看每个数的每位

代码

#include<iostream>
using namespace std;
bool check(int num){
	while(num){
		int digit = num%10;
	    if(digit == 2||digit == 4) return false;
	    num /= 10;
	}
	return true;
}
int main()
{
	int n = 2019;
	int cnt = 0;
	for(int i = 1;i < 2019;i++){
		for(int j = i+1;j < 2019;j++){
			int k = n-(i+j);//这里不用循环因为只有一个满足i+j+k == 1019
			if(check(i)&&check(j)&&check(k))
			    if(j < k) cnt++;//有重复的,因此从大到小排除
		}
	}
	cout<<cnt;
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

总结

  • 有时不需要循环,因为只有一个符合条件
  • 建议创建函数,使代码更有可读性
  • 注意排除重复的和注意特殊情况
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/302810
推荐阅读
相关标签
  

闽ICP备14008679号