C语言实现蓝桥杯第十届《数的分解》例题

试题 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 个各不相同的正整数之和  ”没看清楚最后做的时候就容易出差错

好了谢谢大家,今天的内容就到这里了,如果帮到你了就点个赞吧,如果有不足热烈欢迎大家指出评论,大家一起进步拜拜!!!! 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值