有n个整数,使前面各数顺序后移m个位置,最后m个数变成最前面m个数。c++指针
时间: 2024-05-07 20:18:35 浏览: 88
这道题可以采用三次翻转的方法来实现。具体操作如下:
1. 将前n-m个数翻转
2. 将后m个数翻转
3. 将整个序列翻转
代码如下:
```c
void reverse(int* nums, int start, int end) {
while (start < end) {
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start++;
end--;
}
}
void rotate(int* nums, int numsSize, int k){
k %= numsSize;
reverse(nums, 0, numsSize - k - 1);
reverse(nums, numsSize - k, numsSize - 1);
reverse(nums, 0, numsSize - 1);
}
```
其中,reverse函数是用来翻转指定区间的元素。rotate函数则是将数组nums中的元素向右移动k位。
相关问题
c++ ,有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最 前面m个数。写一西数实现以上功能,在主函数中输入n个整数和输出调 整后的n个数。用指针做函数的参数。
以下是实现该功能的C++代码:
```c++
#include <iostream>
using namespace std;
void shift(int *arr, int n, int m);
int main() {
int n, m;
cout << "请输入数组元素个数n和移动的位置m:" << endl;
cin >> n >> m;
int *arr = new int[n];
cout << "请输入" << n << "个整数:" << endl;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
shift(arr, n, m);
cout << "移动后的数组为:" << endl;
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
delete[] arr;
return 0;
}
void shift(int *arr, int n, int m) {
int *temp = new int[m];
for (int i = 0; i < m; i++) {
temp[i] = arr[i];
}
for (int i = 0; i < n - m; i++) {
arr[i] = arr[i + m];
}
for (int i = n - m; i < n; i++) {
arr[i] = temp[i - (n - m)];
}
delete[] temp;
}
```
该程序中首先读入数组元素个数n和移动的位置m,并动态分配一个大小为n的整型数组。然后读入n个整数,调用shift函数进行移位操作,最后输出移动后的数组。shift函数中首先动态分配一个大小为m的整型数组temp,将原数组的前m个元素复制到temp中。然后将原数组中第m+1个元素到第n个元素向前移动m个位置,最后将temp中的m个元素复制到原数组的最后m个位置上。最后别忘了在程序结束前释放动态分配的内存。
有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,在主函数中输入n个整数和输出调整后的n个数。用2022版visualstudio写个简单程序,利用指针。
```c++
#include<iostream>
using namespace std;
void move(int *p,int n,int m)
{
int *p_end;
int temp;
p_end=*(p+n-1);
for(int i=1;i<=m;i++)
{
temp=*(p+n-i);
for(int j=n-i;j>=i;j--)
*(p+j)=*(p+j-1);
*(p+i-1)=temp;
}
}
int main()
{
int n,m;
int a[100];
cout<<"请输入n和m:";
cin>>n>>m;
cout<<"请输入"<<n<<"个整数:"<<endl;
for(int i=0;i<n;i++)
cin>>a[i];
move(a,n,m);
cout<<"移动后的数为:"<<endl;
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
```
阅读全文