题目
把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包
含数字 2 和 4,一共有多少种不同的分解方法?
注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。
答案:40785
心得:
- 条件看清楚,不要漏条件
- 加法的交换只算一种 → i<j && j<k
- 不包含2和4 → 取余判断,布尔类型的初始化
- 在printf语句中加入计数器,初始化a = 0。要注意a++是从0开始,++a是从1开始
#include<stdio.h>
int main()
{
int a = 0;
int i,j,k;
int t = 0;
int boolean1 = 0,boolean2 = 0,boolean3 = 0;
for(i = 1;i<2018;i++)
{
t = i;
boolean1 = 0;
while(t>0)
{
if(t%10 == 2||t%10 == 4)
boolean1 = 1;
t = t/10;
}
for(j = 1;j<2018;j++)
{
t = j;
boolean2 = 0;
while(t>0)
{
if(t%10 == 2||t%10 == 4)
boolean2 = 1;
t = t/10;
}
for(k = 1;k<2018;k++)
{
t = k;
boolean3 = 0;
while(t>0)
{
if(t%10 == 2||t%10 == 4)
boolean3 = 1;
t = t/10;
}
if(boolean1 == 0 && boolean2 == 0 && boolean3 == 0)
{
if(i!=j && i!=k && k!=j)
{
if(i+j+k == 2019 && i<j && j<k)
printf("%d + %d + %d %d\n",i,j,k,++a);
}
}
}
}
}
return 0;
}