2

我得到了一个在 C++ 中反转动态数组的任务。到目前为止,从我的逻辑来看,我正在考虑通过数组循环来反转它。这是我的代码:

int main ()
{
    const int size = 10;
    int num_array[size];

    srand (time(NULL));

    for (int count = 0; count< sizeof(num_array)/sizeof(num_array[0]) ; count++){
        /* generate secret number between 1 and 100: */
        num_array[count] = rand() % 100 + 1;
        cout << num_array[count] << " " ;
    }

    reverse(num_array[size],size);

    cout << endl;

    system("PAUSE");
    return 0;
}

void reverse(int num_array[], int size)
{
    for (int count =0; count< sizeof(num_array)/sizeof(num_array[0]); count++){
        cout << num_array[sizeof(num_array)/sizeof(num_array[0])-1-count] << " " ;
    }

    return;
}

不知何故,我认为我的逻辑在那里,但这段代码不起作用,有一些错误。但是,我的老师告诉我,这不是问题想要的方式。这是问题:

    Write a function reverse that reverses the sequence of elements in an array. For example, if reverse is called with an array containing 1 4 9 16 9 7 4 9 11,
then the array is changed to 11 9 4 7 9 16 9 4 1.

到目前为止,她告诉我们在反向方法中,需要交换数组元素。所以这是我的问题,如何交换数组元素以使输入的数组反转

提前致谢。

更新部分

    int main ()
{
const int size = 10;
int num_array[size];

srand (time(NULL));

for (int count = 0; count< size ; count++){
    /* generate secret number between 1 and 100: */
    num_array[count] = rand() % 100 + 1;
    cout << num_array[count] << " " ;
}

reverse(num_array,size);

cout << endl;

system("PAUSE");
return 0;

}

void reverse(int num_array[], const int& size)
{
for (int count =0; count< size/2; count++){
    int first = num_array[0];
    int last = num_array[count-1];
    int temp = first;
    first = last;
    last = temp;
}

}

4

4 回答 4

1

reverse的功能应如下所示:

void reverse(int* array, const size_t size)
{
    for (size_t i = 0; i < size / 2; i++)
    {
        // Do stuff...
    }
}

并称它为:

reverse(num_array, size);
于 2013-05-03T10:22:19.877 回答
1

我不是 C++ 程序员,但是我确实看到了解决这个问题的简单方法。通过简单地使用 for 循环和一个额外的数组(相同大小),您应该能够轻松地反转数组。

通过使用 for 循环,从数组的最后一个元素开始,并将它们按顺序添加到新数组中,最终得到一个反转数组应该相当简单。它会是这样的:

声明两个相同大小的数组(似乎是 10)

  • Array1 包含您的随机数
  • Array2 为空,但可以包含 10 个元素

还要声明一个整数,它将跟踪 for 循环的进程,但方向相反。即不是从头开始,而是从头开始。

  • 计数器 = 0

接下来,您需要创建一个 for 循环以从第一个数组的末尾开始,并将值添加到第二个数组的开头。因此,我们将创建一个 for 循环来执行此操作。for 循环将是这样的:

for(int i = lengthOfArray1; i > 0; i--){
    Array2[Counter] = Array1[i]
    Counter++
}

如果您只想将其打印出来,则不需要计数器或第二个数组,您只需使用 Array1 元素并使用这种 for 循环样式将它们打印出来。

就是这样。如果您出于某种原因希望保留 Array1 的原始值,则可以在之后设置 Array1 = Array2。希望这会有所帮助,不幸的是,将其更改为 C++ 是您的工作。

于 2013-05-03T10:51:08.190 回答
0

您实际上并没有交换数组中的元素,而只是将它们打印出来。我假设她希望您实际更改存储在数组中的内容。

作为提示,通过数组交换第一个和最后一个元素,然后是第二个和第二个最后一个元素,等等。你也只需要循环size/2。当你有size变量时,只需使用它而不是你正在做的所有 sizeof 东西。

于 2013-05-03T09:59:08.347 回答
0

我将实现如下功能

void reverse(int A[], int N)
{
  for (int i=0, j=N-1; i<j; i++, j--){
    int t = A[i];
    A[i] = A[j];
    A[j] = t;
  }
}
于 2014-08-14T17:51:47.050 回答