我正在嘗試解決以下問題:
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)。
在所有這些奶牛中,恰好有兩頭距離最近。FJ 想把它們分散一點。確定哪兩個最接近并按數字順序列印它們的奶牛 ID 號 (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(1 1 2 2) = 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;
}
下面是測驗情況下,我跑: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 運行代碼時,盡管測驗用例相同,但我得到了完全不同的答案,當我嘗試在 replit 中一遍又一遍地運行相同的測驗用例時,程式回傳不同的答案。你知道我為什么會收到這個錯誤嗎?非常感謝!
uj5u.com熱心網友回復:
就在這里,您超出了陣列的范圍
for (int j = i 1; j <= n; j )
-----------------------^
那應該是
for (int j = i 1; j < n; j )
現在給出 7 18
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/460421.html
上一篇:為什么`std::thread()`和`std::packaged_task()`作業方式不同,盡管它們都接受可呼叫目標?
