本文共 1099 字,大约阅读时间需要 3 分钟。
把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法?
注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和1001+1000+18 被视为同一种。 答案提交这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
输入没有输入。
输出输出一个整数。
提示把答案放在输出语句中输出,例如C/C++语言可以用printf或cout。
注意:需要输出的是一个整数,不要输出任何多余内容。思路:
感觉也是水题吧,本题没什么难点(相对于那些需要很大技巧或者需要算法的题目而言(捂脸))。 本题只需要用一个三重循环来枚举出所有可能的数,然后来判断这三个数是否符合题目要求即可。可以写一个专门检测是否包含2或者4的函数,这样代码简洁一些。并且要加入一些判断条件来减小循环次数,否则运行时间太久了。 最后需要特别注意的是:最后结果要除以6,因为3个数的全排列为6!!!!!不是除以3!!代码:
#includeint 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/