如何将数组后面的M个数移动为前面的M个数
题目:有n个整数,使前面各数后移m个位置,最后m个数变成最前面的m个数
例:
begin[10]={1,2,3,4,5,6,7,8,9,10};
//移动后
over[10]={6,7,8,9,10,1,2,3,4,5};
思路:
1.首先将前m个 以及前n-m个元素分别顺序颠倒
middle[10]={5,4,3,2,1,10,9,8,7,6};
2.最后将整个数组对位交换
over[10]={6,7,8,9,10,1,2,3,4,5};
代码示例:
void Exchange(int *start,int *end)
{
while (start < end)
{
int temp = *start;
*start = *end;
*end = temp;
++start;
--start;
}
}
void ECarray(int n, int m, int *numbers)
{
Exchange(numbers, numbers + m - 1);//前m个顺序颠倒
Exchange(numbers + m - 1, numbers + n - 1);//后n-m个数顺序颠倒
Exchange(numbers, numbers + n - 1);//所有数顺序颠倒
}
int main
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int len=szieof(arr)/szieof(arr[0]);
ECarray(len,5,arr);
for(int i=0;i<n;i++){
cout<<arr[i]}
cout<<endl;
}
一次for循环打印多维数组
二维数组按照在内存中按行储存的规则,可以看成一维数组进行打印
#include<iostream>
using namespace std;
#define MAXX 3
#define MAXY 4
int main()
{
int array[MAXX][MAXY] = { 1,2,3,4,5,6,7,8,9,1,2,3 };
for (int i = 0; i < MAXX*MAXY; i++) {
cout << array[i / MAXY][i%MAXY] << " ";
}
cout << endl;
}
三维数组一样可以用相对应的方法实现
int main()
{
int array[2][2][3] = { { {1,2,3},{4,5,6} },{ {7,8,9},{1,2,3} } };
for (int i = 0; i < 2 * 2 * 3; i++) {
cout << array[i / 6][(i / 3) % 2][i % 3] << " ";
}
cout << endl;
}
三维数组需要考虑的是,每一维数字的取值循序问题,
第一维,前六次循环都是取0,后6次取1,所以使用i/6
第二维 需要得到0 1 0 1 于是用量化的思想i/3分为4组,每组3个,量化为0 1 2 3,然后对其%2处理 变为0 1 0 1
最后一维 需要的是0,1 2,所以直接用i%3即可