数字2019的分解问题

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

这道题的主要目的就是对数字的分解,分解出来三个数字,对于三个数字的特点通过题干我们可以得知:

1.要求分解成三个整数

2.三个整数各不相同,不可以出现重复

3.三个数的顺序调换加和得到2019被视作为一种方法

4.被分解的三个数中2,4 不可以同时出现

对于这种问题的解法我们采用遍历法将三个数值进行确定,为了满足上述的四个特点,我们在设计for循环时加上对他们的判断即可。

对于特点一,使用for循环即可解决

对于特点二三,我们可以规定三个数有大小顺序。我们可以规定被分解的第一个数必须大于第二个数,而第二个数必须大于第三个数。以这样的的方法,我们满足了这三个数的特点二和特点三。

对于特点四,我们在每次在for得到整数时,都对他进行逐位拆解,然后再逐位判断即可。

代码如下:

#include<stdio.h>
int judge(int num)
{
	while (num)
	{
		if ((num % 10 == 2) || (num % 10 == 4))
		{
			return 0;
		}
		num = num / 10;
	}
	return 1;
}
int main()
{
	int i = 0; int j = 0; int k = 0;
	int count = 0;
	for (i = 1; i < 2019; i++)
	{
		{
			for (j = 1; j < 2019; j++)
			{
				k = 2019 - i - j;
				if (judge(j)&&judge(i)&&judge(k))
				{
					if (i < j && j < k)
						count++;
				}

			}
		}
	}
	printf("%d\n", count);
	return 0;
}


版权声明:本文为weixin_63192658原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。