站外题。这段代码实际运行的时候发现输入的那几行有问题,用序号标出来了,求调。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int MOD = 123456789;
// 找到元素在有序数列中的目标位置
int findTargetPos(const vector<int>& sortedArr, int num) {
for (size_t i = 0; i < sortedArr.size(); ++i) {
if (sortedArr[i] == num) {
return i;
}
}
return -1; // 正常情况下不会执行到这,只是为了消除编译警告
}
int main() {
//freopen("10.in","r",stdin);
//freopen("10.out","w",stdout);
//有问题的地方从这里开始,已通过其他方式确认
int n;
cin >> n;
vector<int> arr;
for (int i = 0; i < n; i++) {
int x;
cin >> x; arr.push_back(x);
}//有问题的地方从这里结束。
vector<int> sortedArr = arr;
sort(sortedArr.begin(), sortedArr.end());
int energy = 0;
for (int i = 0; i < n; ++i) {
int targetPos = findTargetPos(sortedArr, arr[i]);
cout << '?';
while (i!= targetPos) {
swap(arr[i], arr[targetPos]);
energy += arr[i] + arr[targetPos];
energy %= MOD;
targetPos = findTargetPos(sortedArr, arr[i]);
//cout << '!';
} cout << energy << ' ';
}
cout << energy << endl;
//fclose(stdin);
//fclose(stdout);
return 0;
}