java – 将整数分为总和和产品

前端之家收集整理的这篇文章主要介绍了java – 将整数分为总和和产品前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我需要做的:写一个算法,将一个给定的整数分解为和和产品,但每个后续数字必须大于前一个,即:
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,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相关文章