【问题标题】:This logic seems correct but its not working . Is there any mistake? [duplicate]这个逻辑似乎是正确的,但它不起作用。有什么错误吗? [复制]
【发布时间】:2019-03-28 09:53:21
【问题描述】:

程序是反转数组的内容。 例如,如果数组包含 {1,2,3,4,5} 它应该显示 {5,4,3,2,1}

for(i=0;i<n;i++)
{
    tmp=a[i];
    a[i]=a[n-1-i];
    a[n-1-i]=tmp;
}

【问题讨论】:

  • 如果你仔细观察,这个循环会反转两次,得到原始数组。
  • 在此之后如果我使用另一个 for 循环并打印数组...我得到 {1,2,3,4,5}
  • 您能进一步解释一下吗?
  • @Targeryen 拿一张纸和一支铅笔,你应该能够弄清楚你的方法有什么问题
  • @suvenpandey 您不必将自己的答案作为评论发布。

标签: c++


【解决方案1】:

要反转一个数组,您不需要遍历整个数组。这将导致两次反转数组。 试试for(i=0;i&lt;n/2;i++)

【讨论】:

    【解决方案2】:

    你可以这样反转

    for (int i = 0; i < n--; i++)
    {
        tmp = a[i];
        a[i] = a[n];
        a[n] = tmp;
    }
    

    【讨论】:

      【解决方案3】:

      您正在原地反转数组,因此在第一步之后,您将第一个和最后一个元素放在正确的位置。迭代一半以上的元素后,您的前半部分和后半部分处于正确位置。现在,遍历所有元素,将每个元素交换两次,从而得到原始数组。

      【讨论】:

      • 好像有人在疯狂投票,如果你知道出了什么问题,告诉我会很酷
      【解决方案4】:
      int i = 0, j = n - 1;
      for (i = 0; i < n/ 2; i++, j--)
      {
          int temp = array[i];
          array[i] = array[j];
          array[j] = temp;
      }
      

      【讨论】:

      • 虽然这段代码可能(或可能不会)解决问题,但好的问题还应该解释为什么这段代码有帮助以及它如何解决问题。
      猜你喜欢
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多