You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用嵌套for循环实现C++数组反转?遇问题求助

问题分析

你当前的问题出在内层循环的终止条件没有随着外层循环调整——每次外层循环后,已经有一个元素被放到了正确的末尾位置,但内层循环仍然遍历整个数组,导致已经归位的元素又被重新交换移动,无法实现反转。

比如你的数组[1,2,3]:

  1. 第一次外层循环执行后,数组变成[2,3,1](1已归位到末尾)
  2. 第二次外层循环的内层循环仍然遍历整个数组,会先交换2和3得到[3,2,1],接着又交换2和1得到[3,1,2],把已经归位的1又移到了中间。
修正方案

需要让内层循环只处理尚未归位的前半部分元素,每次外层循环后,未处理的元素数量减1,内层循环的终止条件也对应调整。

修改后的代码如下:

#include <iostream>

using namespace std;

int main() {
  int arr[] = {1,2,3};
  int length = sizeof(arr)/sizeof(arr[0]);
  int temp;

  // Before reverse
  cout << endl;
  for (int j = 0; j < length; j++) {
    cout << arr[j] << " ";
  }

  // 外层循环执行length-1次即可完成反转
  for(int l = 0; l < length - 1; l++) {
    // 内层循环只处理前length-1-l个元素(跳过已归位的l个末尾元素)
    for(int i = 0; i < length - 1 - l; i++) {
      temp = arr[i];
      arr[i] = arr[i+1];
      arr[i+1] = temp;
    } 
  }

  // After Reverse 
  cout << endl;
  for (int k = 0; k < length; k++) {
    cout << arr[k] << " ";
  }
}
逻辑解释
  • 外层循环:数组长度为n时,只需要执行n-1次外层循环,因为每次都会把一个未处理的首元素移到未处理部分的末尾,n-1次后所有元素都归位。
  • 内层循环:每次外层循环l后,已经有l个元素在末尾正确位置,所以内层循环只需要处理前n-1-l个元素,避免触碰已经归位的元素。

运行修改后的代码,输出会是:

1 2 3 
3 2 1 

内容的提问来源于stack exchange,提问作者cindicate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:05:33