c++ - 检查反转数组是否与原始数组相同

标签 c++

我有一项家庭作业任务是检查反向数组是否与使用函数的原始数组相同。我曾尝试编写代码,但每次运行它时它都会给我相同的“TAIP”答案。我阅读了如何反转数组的教程,所以我尝试使用 2 个数组:原始数组和反转数组,然后比较它。但是,它在我的代码中不起作用,我不知道为什么。

#include <iostream>
#include <fstream>
using namespace std;
void funk(int a[], int n, int b[], int &nes);

int main()
{
    int a[10], n, b[10],nes = 0;

    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
        b[i] = a[i];//the same elements
    }

    funk(a, n, b, nes);
    if (nes != 0) {
        cout << "NE";
    }
    else
        cout << "TAIP";

}

void funk(int a[], int n, int b[], int &nes) {
    int j, i=0, pap;
    j = i - 1; //last element

    while (i < j)
    {
        pap = b[i];
        b[i] = b[j];
        b[j] = pap;
        i++;
        j--;
    }
    for (int c = 0; c < n; c++) {
        if (a[c] != b[c]) {
      nes++;
      break;
        }
    }
}

输入:

6
8 5 8 1 3 8

我需要得到的输出:NE

最佳答案

您的方法似乎不必要地复杂且效率低下。对于n 元素的反向不变数组a,条件a[i]==a[n-i-1]<对于 0n/2 之间的所有 i 必须为 true

示例性解决方案:

template <typename T>
bool is_reverse_invariant(T a[], size_t n)
{
   for (size_t i = 0; i < n/2; i++)
      if (a[i] != a[n-i-1]) return false;
   return true;
}

你的代码有问题

int j, i=0, pap;
j = i - 1; //last element

j 应该初始化为

j = n - 1; 

相反。

关于c++ - 检查反转数组是否与原始数组相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58975792/

相关文章:

c++ - 无法让 windbg 识别我的扩展

c++ - 此示例中的 'aliased local shared_ptr' 是什么

c++ - 列出 STL C++ 结构

c# - OpenGL 不在我的 C# 面板上显示/绘制

c++ - 如何制作一个实例化类并将它们排序在地址列表中的循环?

c++ - 编译器在模板类中实例化函数,甚至不调用它

c++ - Visual Studio 中的 Cuda 并行代码生成

c++ - 具有大变量的高阶贝塞尔函数计算

c++ - 从 C++ 异常的构造函数中抛出异常

c++ - 类中 vector 的动态分配