2019蓝桥杯省赛题目——“数的分解”

目录

题目

要求

思路

最后的代码

结果


1|0题目

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

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

2|0要求

这是一道结果填空的题,你只需要算出结果后提交即可

3|0思路

思路很简单——穷举每一个数字

每个正整数都不包含数字 2 和 4就把各个位数的千位百位十位各位提取出来分别判断

bool Panduan(int n) { int a = n / 1000; int b = (n - a * 1000) / 100; int c = (n - a * 1000 - b * 100) / 10; int d = n % 10; if (a == 2 || a == 4 || b == 2 || b == 4 || c == 2 || c == 4 || d == 2 || d == 4) { return false; } else { return true; } }

关于筛选只是顺序不同的数字可以固定大小比如三个数字x,y,z固定x>y>z这样就不会因为顺序不一样,造成多算出来结果

for (int i = 1; i<2019 ;i++) { for (int j = i+1; j < sum_1 - i; j++) { int z = sum_1 - i - j; ... } }

4|0最后的代码

就是

#include <iostream> using namespace std; int sum_1 = 2019; bool Panduan(int n) { int a = n / 1000; int b = (n - a * 1000) / 100; int c = (n - a * 1000 - b * 100) / 10; int d = n % 10; if (a == 2 || a == 4 || b == 2 || b == 4 || c == 2 || c == 4 || d == 2 || d == 4) { return false; } else { return true; } } int main() { int sum_max = 0; for (int i = 1; i<2019 ;i++) { for (int j = i+1; j < sum_1 - i; j++) { int z = sum_1 - i - j; if (i == z || z == j || j >= z) { continue; } if (Panduan(i) && Panduan(j) && Panduan(z)) { sum_max++; } else { continue; } } } cout << sum_max << endl; return 0; }

5|0结果

40785


__EOF__

本文作者xxxx
本文链接https://www.cnblogs.com/mumuemhaha/p/17710179.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   木木em哈哈  阅读(27)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示