C++ 程序在 IDE 中返回不同的结果以及 运行 相同数据时的不同结果
C++ Program Returning Differing Results in IDEs and differing results when running the same data
我正在尝试解决以下问题:
Farmer John 获得了一组 N (2 <= N <= 2,000) 头敏感的奶牛
谁方便编号 1..N。他们真的讨厌靠得太近
给其他奶牛。很多。
FJ记录了每头牛i的整数X_i,Y_i坐标(1
<= X_i <= 100,000; 1 <= Y_i <= 100,000).
在所有这些奶牛中,恰好有两只离得最近。缩略词
想把它们分散一点。确定哪两个最接近
在一起并按数字顺序打印他们的奶牛编号 (i)。
10 | . . . . . . . 3 . . . . .
9 | . 1 . . 2 . . . . . . . .
8 | . . . . . . . . . . . . .
7 | . . . . . . . . . . 4 . .
6 | . . . . . . 9 . . . . . .
5 | . 8 . . . . . . . . . . .
4 | . . . . . 7 . . . . . . .
3 | . . . . . . . . . 5 . . .
2 | . . . . . . . . . . . . .
1 | . . . . 6 . . . . . . . .
0 ---------------------------
1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3
快速目测显示奶牛 7 和 9 距离最近
(它们之间的距离是 sqrt(11+22) = sqrt(5),所以
单行输出为“7 9”(当然没有引号)。
以下是我解决问题的编码尝试:
using namespace std;
int main() {
int n; cin >> n;
long long xcord[n],ycord[n];
for (int i=0; i<n; i++) {
cin >> xcord[i];
cin >> ycord[i];
}
long long shortest = 9999999999999;
int a=-1, b=-1;
for (int i=0; i<n; i++) {
for (int j=i+1; j<=n; j++) {
long long curDist = (xcord[i]-xcord[j])*(xcord[i]-xcord[j]) + (ycord[i]-ycord[j])*(ycord[i]-ycord[j]);
// cout << curDist << " ";
if (curDist < shortest) {
shortest = curDist;
a=i+1, b=j+1;
}
}
}
cout << a << " " << b << endl;
}
这是我 运行ning 的测试用例:
25
24804 7918
98983 95075
10819 48641
84481 33476
56724 20854
83193 17014
72997 5394
69263 33045
26810 75288
85442 47243
81678 82129
84199 35206
68212 77035
62113 87896
49538 1375
145 90953
58175 62546
73175 5853
7789 37961
18883 49418
78257 90342
2048 64282
49057 95081
89406 47329
9778 68104
当我 运行 使用我的代码测试用例时,我得到正确答案 7 18。我正在 运行 使用 VSCode 设置代码。当我尝试使用 replit 运行ning 代码时,尽管测试用例相同,但我得到了完全不同的答案,当我在 replit 中一遍又一遍地尝试 运行ning 相同的测试用例时,程序 returns 不同的答案。你知道我为什么会收到这个错误吗?非常感谢!
在这里你超出了数组的范围
for (int j = i + 1; j <= n; j++)
-----------------------^
应该是
for (int j = i + 1; j < n; j++)
现在给出 7 18
我正在尝试解决以下问题:
Farmer John 获得了一组 N (2 <= N <= 2,000) 头敏感的奶牛 谁方便编号 1..N。他们真的讨厌靠得太近 给其他奶牛。很多。
FJ记录了每头牛i的整数X_i,Y_i坐标(1 <= X_i <= 100,000; 1 <= Y_i <= 100,000).
在所有这些奶牛中,恰好有两只离得最近。缩略词 想把它们分散一点。确定哪两个最接近 在一起并按数字顺序打印他们的奶牛编号 (i)。
10 | . . . . . . . 3 . . . . .
9 | . 1 . . 2 . . . . . . . .
8 | . . . . . . . . . . . . .
7 | . . . . . . . . . . 4 . .
6 | . . . . . . 9 . . . . . .
5 | . 8 . . . . . . . . . . .
4 | . . . . . 7 . . . . . . .
3 | . . . . . . . . . 5 . . .
2 | . . . . . . . . . . . . .
1 | . . . . 6 . . . . . . . .
0 ---------------------------
1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3
快速目测显示奶牛 7 和 9 距离最近 (它们之间的距离是 sqrt(11+22) = sqrt(5),所以 单行输出为“7 9”(当然没有引号)。
以下是我解决问题的编码尝试:
using namespace std;
int main() {
int n; cin >> n;
long long xcord[n],ycord[n];
for (int i=0; i<n; i++) {
cin >> xcord[i];
cin >> ycord[i];
}
long long shortest = 9999999999999;
int a=-1, b=-1;
for (int i=0; i<n; i++) {
for (int j=i+1; j<=n; j++) {
long long curDist = (xcord[i]-xcord[j])*(xcord[i]-xcord[j]) + (ycord[i]-ycord[j])*(ycord[i]-ycord[j]);
// cout << curDist << " ";
if (curDist < shortest) {
shortest = curDist;
a=i+1, b=j+1;
}
}
}
cout << a << " " << b << endl;
}
这是我 运行ning 的测试用例: 25 24804 7918 98983 95075 10819 48641 84481 33476 56724 20854 83193 17014 72997 5394 69263 33045 26810 75288 85442 47243 81678 82129 84199 35206 68212 77035 62113 87896 49538 1375 145 90953 58175 62546 73175 5853 7789 37961 18883 49418 78257 90342 2048 64282 49057 95081 89406 47329 9778 68104
当我 运行 使用我的代码测试用例时,我得到正确答案 7 18。我正在 运行 使用 VSCode 设置代码。当我尝试使用 replit 运行ning 代码时,尽管测试用例相同,但我得到了完全不同的答案,当我在 replit 中一遍又一遍地尝试 运行ning 相同的测试用例时,程序 returns 不同的答案。你知道我为什么会收到这个错误吗?非常感谢!
在这里你超出了数组的范围
for (int j = i + 1; j <= n; j++)
-----------------------^
应该是
for (int j = i + 1; j < n; j++)
现在给出 7 18