java - 整数划分为总和和乘积

标签 java algorithm integer

这是我需要做的:编写一个算法,将给定的整数拆分为和和乘积,但后面的每个数字都必须大于前一个,即:

6 = 1+5;
6 = 1+2+3;
6 = 1*2+4;
6 = 2+4;
6 = 2*3;

基本分区整数算法将无法工作,因为它以不同的顺序返回数字。

我不是要最终代码,我只是要一些提示和建议,这样我才能继续前进。非常感谢您!

最佳答案

public class Perms {

/**
 * @param args
 */
public static int x;
public static void main(String[] args) {
    // TODO Auto-generated method stub

    x = 6;
    rec(x, new int[1000], new String[1000], 0);
}

public static void rec(int n, int all[], String operator[], int size)
{
       if (n==0)
       {
          if (size==1)return;
          System.out.print(x + " =");
          for (int i=0;i<size;i++)
          {
             System.out.print(" " + all[i]);
             if (i!=size-1)
                 System.out.print(" " + operator[i]);
          }
          System.out.println();
          return;
       }
       int i=1;
       if (size>0)
          i = all[size-1]+1;
       for ( ;i<=n;i++)
       {
          operator[size] = "+";
          all[size] = i;
          rec(n-i, all, operator, size+1);
       }

       i=1;
       if (size>0)
          i = all[size-1]+1;
       for (;i<=n;i++)
       {
          float r = n/(float)i;
          if (r == (int)r)
          {
             operator[size] = "*";
             all[size] = i;
             rec(n/i, all, operator, size+1);
          }
       }
    }
}

输出:

6 = 1 + 2 + 3
6 = 1 + 5
6 = 2 + 4
6 = 1 * 2 + 4
6 = 1 * 6
6 = 1 * 2 * 3
6 = 2 * 3

注意:操作有后优先级(从右到左评估操作)。

示例:20 = 2 * 3 + 7 = (2 * (3 + 7)) = 2 * 10 = 20。

添加这些括号很容易。但是,输出看起来很难看。只是注意到更好。

关于java - 整数划分为总和和乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19646325/

相关文章:

javascript - JavaScript 是否支持 64 位整数?

javascript - 似乎无法在 javascript 中添加两个整数?

java - 字符串被分配给列表而没有编译错误

java - Netbeans 上运行的 Spring 应用程序 java.lang.UnsatisfiedLinkError

java - 为什么 Java 使用 (hash & 0x7FFFFFFF) % tab.length 来决定键的索引?

PHP - 这个 Levenshtein 距离递归算法太慢了还是我错了?

java - 嵌套 Hashmap 覆盖其他键

java - 在java中编写等于字符串匹配的正则表达式

algorithm - 制作 SOS 的最佳策略游戏

algorithm - 重新创建序列