1

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

例如n=12,我想要4,8。因为它应该是 0+4=4,然后是 4+4=8,然后是 8+4=12。IE。数字之间的间隔应该是均匀的,这很重要。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;      
}
4

3 回答 3

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
于 2013-11-13T13:14:28.457 回答
0
if (n % 3 != 0) {
    n = ((n / 3) + 1) * 3;
}

int a = n / 3;
int b = a * 2;
于 2013-11-13T13:14:04.113 回答
0

下面的代码分为n三个相等的区间。如果n不是三的倍数,则增加到下一个更大的三倍数:

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

您的时间间隔是:0 - a, a - b,b - n

于 2013-11-13T13:14:28.753 回答