我的程序应该用偶数个零替换组,该行以两个零连续出现,用奇数个零组替换只有一个零。如果输入不为零,则应保持原样。我编写了以下代码来解决此问题。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cout << "Enter an array size:\n";
cout << "n = ";
cin >> n;
vector<int> arr(n);
vector<int> temp_arr(n);
cout << "Enter an array:\n";
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
for (int i = arr.size() - 1; i >= 1; i--) {
if (arr[i] == arr[i - 1] && arr[i] == 0){
temp_arr.push_back(i);
}
else if (arr[i] != 0) {
if (temp_arr.size() % 2 == 1) {
arr.erase(arr.begin() + i);
temp_arr.clear();
}
else if (temp_arr.size() % 2 == 0){
arr.erase(arr.begin() + i);
arr.insert(arr.begin() + i , 0);
temp_arr.clear();
}
}
}
cout << "Output of the program:\n";
for (int i = 0; i < arr.size(); i++) {
cout << arr[i] << " ";
}
system("pause");
return 0;
}
但是编译后我得到了:整个数组被替换为零。
我做错什么了?
最佳答案
我已经更改了程序的结构(已插入计数器count_zeroes
代替辅助 vector temp_arr
),但这应该可以正常工作:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
cout << "Enter an array size:\n";
cout << "n = ";
cin >> n;
vector<int> arr(n);
// temp_arr not used
cout << "Enter an array:\n";
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
int count_zeroes = 0;
for (int i = arr.size() - 1; i >= 0; i--) { // index to i=0 included
if (arr[i] == 0)
count_zeroes++;
if (i == 0 || arr[i] != 0) { // corner case of arr = all zeroes included
if (count_zeroes != 1 && count_zeroes % 2 == 1)
arr.erase(arr.begin()+i+1, arr.begin()+i+count_zeroes);
else if (count_zeroes != 0 && count_zeroes != 2 && count_zeroes % 2 == 0)
arr.erase(arr.begin()+i+2, arr.begin()+i+count_zeroes);
count_zeroes = 0;
}
}
cout << "Output of the program:\n";
for (vector<int>::size_type i = 0; i < arr.size(); i++) {
cout << arr[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
关于c++ - C++用仅两个零替换数组中的偶数个零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64372352/