LQ0005 数的分解枚举+进制
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0005 数的分解枚举+进制相关的知识,希望对你有一定的参考价值。
题目出处:蓝桥杯2019初赛
题目描述
把2019分解成3个各不相同的正整数之和,并且要求每个正整数都不包含数字2和4,一共有多少种不同的分解方法?
注意交换3个整数的顺序被视为同一种方法,例如1000+1001+18 和1001+1000+18 被视为同一种。
题目分析
用枚举法来解决。
写一个判定正整数是否含有数字2和4,根据进制原理来实现。
枚举三个数i、j和k,使其满足0<i<j<k,可以减少计算量。k可以不用枚举,用i和j算出,k=2019-i-j,可以减少枚举大幅减少计算量。
还有一种算法,先把1-2019之间的不含有2和4数字的数算出来,再枚举这些数,可以避免重复判定。
AC的C语言程序如下:
/* LQ0005 数的分解 */
#include <stdio.h>
const int N2019 = 2019;
const int N = 2019 / 3;
int judge(int n)
while (n)
int t = n % 10;
if (t == 2 || t == 4)
return 1;
n /= 10;
return 0;
int main()
int cnt = 0;
for (int i = 1; i <= N; i++)
if (judge(i))
continue;
for (int j = i + 1, k; j <= N2019; j++)
if (judge(j))
continue;
if ((k = N2019 - i - j) > j)
if (judge(k)) continue;
else cnt++;
else
break;
printf("%d\\n", cnt);
return 0;
以上是关于LQ0005 数的分解枚举+进制的主要内容,如果未能解决你的问题,请参考以下文章