我有一个整数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;
}
答案 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 - a
,a - b
,b - n