数组元素倒置C++

给一个数组 {1,2,3,4,5,6,7,8},使其变成{8,7,6,5,4,3,2,1},输出数组

做题思路:第一个和最后一个交换,前者依次类加,后者依次类减,到达某一限度后停止交换。数组元素个数分为奇数个和偶数个,如果是奇数则交换为小于 n/2 次,偶数的话交换次数小于(n+1)/2次,这里采用for循环解题,还有思路改进。

C++中数组长度为,(sizeof(arr)/sizeof(arr[0]))-1,求出最后一个下标

代码示例

#include <iostream>
using namespace std;

int main(){

int arr[]={1,2,3,4,5,6,7,8};
int lastIndex =(sizeof(arr)/sizeof(arr[0]))-1;

//判断是否为偶数
float target =(lastIndex+1) % 2;
//偶数
if (target ==0)
{
   for (int i = 0; i < (lastIndex+1)/2; i++)
   {
        int temp =arr[lastIndex-i];
        arr[lastIndex-i] = arr[i] ;
        arr[i]=temp;
   }
   for (int i = 0; i <= lastIndex; i++)
   {
   
    cout<<arr[i];
   }
   
   
}
//奇数
else if(target !=0)
{
for (int i = 0; i < (lastIndex)/2; i++)
{
        int temp =arr[lastIndex-i];
        arr[lastIndex-i] = arr[i] ;
        arr[i]=temp;
}
for (int i = 0; i <= lastIndex; i++)
   {

    cout<<arr[i];
   }
}
return 0;
}

分析:代码太多,前面说到交换到达某一条件后停止交换,那么就不用判断奇偶了,只需判断交换停止的条件就行了

改进:使用while循环

#include <iostream>
using namespace std;

int main(){

int arr[]={1,2,3,4,5,6,7,8};
结束索引
int end =(sizeof(arr)/sizeof(arr[0]))-1;
起始索引
int start =0;
交换停止条件
while (start<end)
{
    int temp =arr[end];
        arr[end] = arr[start] ;
        arr[start]=temp;
        start++;
        end--;
}
for (int i = 0; i <= (sizeof(arr)/sizeof(arr[0]))-1; i++)
   {

    cout<<arr[i];
   }
   return 0;
}
posted @ 2023-03-10 10:59  ikun、  阅读(70)  评论(0编辑  收藏  举报