//数的分解
#include <stdio.h>
#include <stdlib.h>
int func(int x)//判断x中是否含2和4,包含返回0,不包含返回1
{
while (x)
{
if ((x % 10 == 2) || (x % 10 == 4))
{
return 0;
}
x /= 10;
}
return 1;
}
int main(int argc, char *argv[])
{
int i = 0;//i,j,k表示三个加起来为2019的数
int j = 0;
int k = 0;
int sum = 0;//统计共有多少种方法
for (i = 1;i < 2018;i++)
{
//因为是分成3个正整数。
//所以不会有一个数为2019,不然另外两数为0
//同理2018也不可能,否则剩余两个数会有一个为0
for (j = 1;j < 2018;j++)
{
if (!func(i))//判断i中是否含2和4,包含返回0,不包含返回1
{
continue;
}
if (!func(j))//判断j中是否含2和4,包含返回0,不包含返回1
{
continue;
}
//i和j都确定了,那么第三个数k也就确定了
k = 2019 - i - j;
if (!func(k))//判断j中是否含2和4,包含返回0,不包含返回1
{
continue;
}
//上面都没有continue出去,说明该序列i,j,k符合要求
//但到这里还需判断一步,因为交换 3 个整数的顺序被视为同一种方法,
//例如 1000+1001+181000+1001+18 和 1001+1000+181001+1000+18 被视为同一种。
if (i < j&&j < k)//大小于可以自己制定
{
sum++;
}
}
}
printf("%d", sum);
return 0;
}
C语言蓝桥杯刷题:数的分解
最新推荐文章于 2024-03-08 22:37:55 发布