试题 D: 数的分解
本题总分:10 分
【问题描述】
把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包 含数字 2 和 4,一共有多少种不同的分解方法? 注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
————————————————
!!!2019 分解成 3 个各不相同的正整数之和!!!重点是这句话,不相同的三个数,并且是整数不包含零!有一些基础薄弱的同学有可能对0是不是正整数的一些问题感到疑惑,这里统一给大家说明一下(并不是歧视大家哦,大佬可自行略过嘿嘿嘿): 0是整数,但并不是正整数,也不是负整数。不要问为什么哈哈哈,问就是科学家规定的,好了好了不开玩笑了(狗头)原因:整数(integer)就是像-3,-2,-1,0,1,2,3,10等这样的数。注:现中学数学教材(2005年)中规定:零和正整数统称自然数。大家了解这些就够了!!!好了大家看代码吧!!!
#include <stdio.h>
int pd(int n) {
//这个函数的功能是判断三个数中有没有2或4,有返回0,没有返回1
while (n) {
if (2 == n % 10 || 4 == n % 10) {
return 0;
}
n /= 10;
}
return 1;
}
int i = 0, j = 0, k = 0, count = 0;
int main(void) {
//第一种方法
for (i = 1; i < 2019; ++i) {
if (pd(i)) {
for (j = i + 1; j < 2019; ++j) {
if (pd(j)) {
k = 2019 - i - j;
if (i < j && j < k && pd(k)) {
++count;
}
}
}
}
}
printf("%d\n", count);
/*
第二种发法(通俗易懂)
for (i = 1; i < 2019; ++i) {
if (pd(i)) {
for (j = i + 1; j < 2019; ++j) {
if (pd(j)) {
k = 2019 - i - j;
if (pd(k)) {
if (i != j && i != k && j != k && k > 0) {
// 下面是举例的一些找规律的例子
// 因为每种都有三种情况所以最后除以三
// 2 2017 1
// 1 2 2017
// 1 2017 2
//
// 1000 1001 18
// 18 1000 1001
// 18 1001 1000
//
// 1006 1010 3
// 3 1006 1010
// 3 1010 1006
++count;
}
}
}
}
}
}
printf("%lld\n", count / 3);
*/
return 0;
}
总结:这题其实就是找规律,和注意审题,其他的没什么,大家审题一定要仔细,我问了好多人就是开头那就话 “ 把 2019 分解成 3 个各不相同的正整数之和 ”没看清楚最后做的时候就容易出差错
好了谢谢大家,今天的内容就到这里了,如果帮到你了就点个赞吧,如果有不足热烈欢迎大家指出评论,大家一起进步拜拜!!!!