当前位置:   article > 正文

JAVA算法(数的分解)_数的分解java

数的分解java

题目描述

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

注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。
解题思路:
首先我们分析组成2019的三个数有哪几类?1. ABC类排列方式为六种(ABC,ACB,BAC,BCA, CAB,CBA),2. AAB类排列方式有三种(AAB,ABA,BAA),3. AAA类排列方式一种。而题目要求把 2019 分解成 3 个各不相同的正整数之和也就是说只保留ABC类的组合方式,j = i + 1,减少一半排列方式。
 

  1. public static void main(String[] args) {
  2. int n = 2019;
  3. int num = 0;
  4. for (int i = 1; i < n; i++) {
  5. if ((i + "").indexOf("2") != -1 || (i + "").indexOf("4") != -1)
  6. continue;
  7. for (int j = i + 1; j < n; j++) {
  8. if ((j + "").indexOf("2") != -1 || (j + "").indexOf("4") != -1)
  9. continue;
  10. int k = n - i - j;
  11. if (i == k || j == k || i == j)
  12. continue;
  13. if (k > 0 && (k + "").indexOf("2") == -1 && (k + "").indexOf("4") == -1)
  14. num++;
  15. }
  16. }
  17. System.out.println(num / 3);
  18. }

补充解释:
ABC类排列方式为六种(ABC,ACB,BAC,BCA,CAB,CBA),同时对第二值,也就是中间的值做了限制,保证它一定要比第一个值大,假如A = 1, B = 2, C = 3,(123,132,213,231,312,321) 六种组合方式,但是加了上述限制,只剩下三种组合(123,132, 231),所以就除以三,你要是做限制A小于B小于C那就不用除了,直接就是答案。

结果: 40785
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/441301
推荐阅读
相关标签
  

闽ICP备14008679号