均匀分割整数

时间:2013-11-13 13:01:13

标签: java

我有一个整数n,我需要将整数分成2个整数,因为2个整数的总和应该等于n。

例如n = 12,我想要4,8。因为它应该是0 + 4 = 4,然后4 + 4 = 8,然后8 + 4 = 12。即。数字之间的间隔应该是均匀的,这是非常重要的。应将N转换为均匀间隔数。我尝试过以下代码,但有时会给出错误的答案。

int a = n/3;
int b = (n/3) * 2;
if(a+b==n)
{

}
else
{
    n=n+(n-(a+b));
    System.out.println("new n "+n);
    a = n/3;
    b = (n/3) * 2;      
}

3 个答案:

答案 0 :(得分:1)

  

如果n不是3的倍数会怎么样?

     

增加到下一个的三个

这为您提供了两个选项

int a = (n+2) / 3; // round a up
int b = a * 2; // b is double a but a + b != n

int b = n - a; // sum is right and when a is a multiple of 3, b = 2 * a

在第二个选项中

n = 6, a = 2, b = 4
n = 7, a = 3, b = 4
n = 8, a = 3, b = 5,
n = 9, a = 3, b = 6
n =10, a = 4, b = 6
n =11, a = 4, b = 7
n =12, a = 4, b = 8

答案 1 :(得分:0)

if (n % 3 != 0) {
    n = ((n / 3) + 1) * 3;
}

int a = n / 3;
int b = a * 2;

答案 2 :(得分:0)

以下代码将n分为三个相等的间隔。如果n不是三的倍数,则会增加到下一个三倍的倍数:

int a = n / 3;
if (a * 3 < n) {
    a++;
    n = a * 3;
}
int b = a * 2;

您的时间间隔为:0 - aa - bb - n