我正在玩围棋,但我真的被卡住了 以下有效问题。
问题:
给定整数n,l和r,找到将n表示为两个整数A和B之和的方式的数量,使得l≤A≤B≤r。
示例:
对于n = 6,l = 2且r = 4,输出应为
countSumOfTwoRepresentations2(n,l,r)= 2。
只有两种方法可以将6写成A + B,其中2≤A≤B≤4:6 = 2 + 4和6 = 3 + 3.
这是我的代码。它通过了所有单元测试,但失败了 在隐藏的。有人能以某种方式指导我吗? 提前谢谢。
public static int countSumOfTwoRepresentations2(int n, int l, int r) {
int nrOfWays = 0;
for(int i=l;i<=r;i++)
{
for(int j=i;j<=r;j++)
{
if(i+j==n)
nrOfWays++;
}
}
return nrOfWays;
}
答案 0 :(得分:5)
嗯,没有必要进行如此庞大的计算......这很容易计算:
public static int count(int n, int l, int r) {
if (l > n/2)
return 0;
return Math.min(n/2 - l, r - n/2) + ((n%2 == 1) ? 0 : 1);
}
到目前为止通过我的所有测试。对于正面和负面。
答案 1 :(得分:1)
在Java中:
int countSumOfTwoRepresentations2(int n, int l, int r)
{
return Math.max(0,Math.min(n/2-l,r-n/2)+(n+1)%2);
}
在Python3中:
def countSumOfTwoRepresentations2(n, l, r):
return max(0,min(n//2-l,r-n//2)+(n+1)%2)
答案 2 :(得分:0)
int countSumOfTwoRepresentations(int n, int l, int r)
{
int r1 = 0;
if (n > l + r || n < 2 * l)
return 0;
r1 = n - l;
if ((r1 - l) % 2 == 0)
return (r1 - l) / 2 + 1;
else
return (r1 - l + 1) / 2;
}