博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蓝桥杯真题 19省4-数的分解 把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法? 注意交换 3 个整数的顺
阅读量:3962 次
发布时间:2019-05-24

本文共 1099 字,大约阅读时间需要 3 分钟。

问题描述

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

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

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

输入

没有输入。

输出

输出一个整数。

提示

把答案放在输出语句中输出,例如C/C++语言可以用printf或cout。

注意:需要输出的是一个整数,不要输出任何多余内容。

思路:

感觉也是水题吧,本题没什么难点(相对于那些需要很大技巧或者需要算法的题目而言(捂脸))。
本题只需要用一个三重循环来枚举出所有可能的数,然后来判断这三个数是否符合题目要求即可。可以写一个专门检测是否包含2或者4的函数,这样代码简洁一些。并且要加入一些判断条件来减小循环次数,否则运行时间太久了。
最后需要特别注意的是:最后结果要除以6,因为3个数的全排列为6!!!!!不是除以3!!

代码:

#include 
int check(int n)//判断是否包含2或者4 {
int i; while(n) {
i=n%10; if(i==2 || i==4) return 0; n/=10; } return 1;}int main (){
int i,j,k; int sum = 0; int num = 0; for(i=1;i<2019;i++) {
for(j=1;j<2019;j++) {
for(k=1;k<2019;k++) //三重循环来遍历 {
if(i==j || i==k || j==k) //如果有相等的直接结束本次循环 continue; sum = i+j+k; if(sum>2019) //如果大于2019了,跳出这个循环,因为接下来的数都会大于2019,可以减小循环次数 break; if(check(i)==1 && check(j)==1 && check(k)==1 && sum == 2019) //判断 num++; sum=0; //sum复位0 } } } printf("%d",num/6);//最后结果要除以6,因为3个数的全排列为6,这点要特别注意!! return 0; }

答案:40785

转载地址:http://vsrzi.baihongyu.com/

你可能感兴趣的文章
10款免费且开源的项目管理工具
查看>>
java调用javascript :js引擎rhino
查看>>
asp 中常用的文件处理函数
查看>>
ADO中sqlserver存储过程使用
查看>>
Linux KernelTech版FAQ 1.0
查看>>
ntfs分区iis故障的解决
查看>>
个人创业“六大死穴”
查看>>
最重要的 12个 J2EE 最佳实践
查看>>
通过Java Swing看透MVC设计模式
查看>>
Java 理论与实践: 关于异常的争论
查看>>
编写高效的线程安全类
查看>>
提高Java代码可重用性的三个措施
查看>>
编写跨平台Java程序注意事项
查看>>
富人和穷人的12个经典差异
查看>>
java 注意事项[教学]
查看>>
MetaWeblogAPI测试
查看>>
软件配置管理概念-1,介绍
查看>>
软件配置管理概念-2,用户角色
查看>>
软件配置管理概念-3,CM系统的概念
查看>>
JSP/Servlet应用程序优化八法
查看>>