数组元素倒置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;
}