Algorithm 实现之间的差异?

Algorithm 实现之间的差异?,algorithm,debugging,Algorithm,Debugging,所以最近我偶然发现了一个问题,即 代码1: for(long i = 1; i <= m; i++) { long j = (fullsum - 2*(sum -i))/2; if(j >= m+1 && j <=n) { swaps++; } } 对于(长i=1;i=m+1&&j)重写如果(sum-i+j==fullsum-sum-j+i),我们得到 if(2*j == fullsum - 2*(sum-i)) 在

所以最近我偶然发现了一个问题,即

代码1:

for(long i = 1; i <= m; i++) {
    long j = (fullsum - 2*(sum -i))/2;
    if(j >= m+1 && j <=n) {
         swaps++;
    }
}
对于(长i=1;i=m+1&&j)重写
如果(sum-i+j==fullsum-sum-j+i)
,我们得到

if(2*j == fullsum - 2*(sum-i))
在第一个代码中,分配给
j
的值为

long j = (fullsum - 2*(sum -i))/2;
问题很清楚:除法截断导致了不正确的结果。在某些情况下,假设
fullsum-2*(sum-i)=45
,并且
j=22
。现在,第二个条件将为false,因为
2*j!=fullsum-2*(sum-i)


但是,对于第一个条件,
(fullsum-2*(sum-i))/2
的值为
45/2=22
(floor division),因此条件
j=(fullsum-2*(sum-i))/2
将在不应该的情况下计算为有效结果。

对不起,我发布了错误的问题。现在我已经进行了必要的更改。对于由此带来的不便,我深表歉意。
long j = (fullsum - 2*(sum -i))/2;