#include<iostream>
using namespace std;
int main(){
int64_t n;
int64_t m;
int64_t Sum;
cin >> n;
for(int64_t i=0; i<n-1; i++){
int64_t a, b;
cin >> a >> b;
int64_t m = 0;
while(m <= b){
int64_t y = 0;
m = a + y;
Sum += m;
y++;
}
}
cout << Sum;
}
当我在编译器中运行上述代码时,循环没有结束,我一直在输入值。
问题出在这一部分:
while(m<=b){
int64_t y=0;
m=a+y;
Sum +=m;
y++;
}
有int64_t y = 0
,它将在每次迭代中使新y
等于 0。y++
是无用的,因此m = a + y
与永远不会改变m
值的m = a + 0
相同,布尔m <= b
将永远为真。这样做:
int64_t y = 0;
while(m<=b){
m=a+y;
Sum +=m;
y++;
}
在这里,int64_t y = 0
只会执行一次,y
不会被重置,因此循环将终止。