【问题标题】:C++ Replace even number of zeros in an array with only two zerosC ++用只有两个零替换数组中的偶数个零
【发布时间】:2020-10-15 13:12:52
【问题描述】:

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

#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;
}

但编译后我得到了这个:

整个数组都被零替换了。

我做错了什么?

【问题讨论】:

标签: c++ sorting vector


【解决方案1】:

我已经更改了程序的结构(插入了一个计数器 count_zeroes 代替辅助向量 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;
}

【讨论】:

  • @AztekTR 如果该代码位有用,请同时支持此答案(答案旁边的向上三角形按钮)
  • 操作...真的!那就继续加油吧!
猜你喜欢
  • 2023-01-19
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
  • 2013-06-08
相关资源
最近更新 更多