反转数组中的内容

我有一个数字数组,我正试图将其反转。我相信代码中的函数是正确的,但我无法获得正确的输出。

输出如下10 9 8 7 6. 为什么我不能得到另一半数字?当我从计数中去掉 "/2" 时,输出结果如下:10 9 8 7 6 6 7 8 9 10

void reverse(int [], int);

int main ()
{
   const int SIZE = 10;
   int arr [SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

   reverse(arr, SIZE);
   return 0;
}
void reverse(int arr[], int count)
{
   int temp;
   for (int i = 0; i < count/2; ++i)
   {
      arr[i] = temp;
      temp = arr[count-i-1];
      arr[count-i-1] = arr[i];
      arr[i] = temp;

      cout << temp << " ";
   }
}

线路

arr[i] = temp;

是错误的。 (在循环的第一次迭代中,它将 arr[i] 设置为一个未定义的值;以后的迭代将它设置为一个不正确的值)。如果删除这一行,数组应该可以正确反转。

之后,你应该将打印反转数组的代码移到一个新的循环中,该循环将遍历整个列表。 目前的代码只打印前 count/2 个元素。


int temp, i;
for (i = 0; i < count/2; ++i) {
    temp = arr[count-i-1];
    arr[count-i-1] = arr[i];
    arr[i] = temp;
}
for (i = 0; i < count; ++i) {
    cout 
评论(0)

这两个答案在我看来都是正确的。

  1. 第一个 arr[i] = temp; 应该删除

  2. 应该执行第二个循环来打印***所有元素,而不是只打印数组的一半。做反向操作的循环不需要打印。

评论(0)

您不是在打印数组,而是在打印 temp 的值 - 这只是数组的一半...

评论(0)