c++ - C++用仅两个零替换数组中的偶数个零

标签 c++ sorting vector

我的程序应该用偶数个零替换组,该行以两个零连续出现,用奇数个零组替换只有一个零。如果输入不为零,则应保持原样。我编写了以下代码来解决此问题。

#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/

相关文章:

c++ - 来自 istream 的子流

c# - 如果 C# 比 C++ 慢,为什么还要使用它?

javascript - 如何在 ReactJS 中对 JSON 数据进行排序

c++ - 为什么 std::vector 比 std::deque 更受欢迎?

c++ - 将二进制文件读入 vector<char> 读取小于完整文件

c++ - 为枚举类型赋值

javascript - 使用 Canvas 动画化 JS 中的排序算法

algorithm - 在 2 个数组中找到具有第 k 个最大总和的对

arrays - Matlab 中的矢量化范围检查

c++ - WndProc 和 DispatchMessage 的奇怪错误。成员函数不存在?