题目:有 n个整数,使其前面各数顺序向后移 m 个位置,最后m个数变成最前面的 m 个数。
注:代码参考链接如下https://www.nowcoder.com/tutorial/10002/06fa50448f534b0490936c3cab01f9e8。
C代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//打印数组
void print_arr(int array[], int n)
{
for (int i = 0; i < n; ++i) {
printf("%d ", array[i]);
}
printf("\n");
}
//滚动数组
void move(int *array, int n, int offset)
{
int *p, *arr_end;
arr_end = array + n; //数组最后一个元素的下一个位置
int last;
//滚动直到偏移量为0
while (offset)
{
last = *(arr_end - 1);
for (p = arr_end - 1; p != array; --p) //向右滚动一位
*p = *(p - 1);
*array = last;
--offset;
}
}
int main()
{
int arr[20];
int i, n, offset;
//输入数组大小和数组内容
printf("Total numbers?\n");
scanf("%d", &n);
printf("Input %d numbers.\n", n);
for (i = 0; i<n; i++)
scanf("%d", &arr[i]);
//输入滚动偏移量
printf("Set your offset.\n");
scanf("%d", &offset);
printf("Offset is %d.\n", offset);
//打印滚动前数组
print_arr(arr, n);
//滚动数组并打印
move(arr, n, offset);
print_arr(arr, n);
}
C运行结果:C++代码:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
//打印数组
void print_arr(int array[], int n)
{
for (int i = 0; i < n; ++i) {
printf("%d ", array[i]);
}
printf("\n");
}
//滚动数组
void move(int *array, int n, int offset)
{
int *p, *arr_end;
arr_end = array + n; //数组最后一个元素的下一个位置
int last;
//滚动直到偏移量为0
while (offset)
{
last = *(arr_end - 1);
for (p = arr_end - 1; p != array; --p) //向右滚动一位
*p = *(p - 1);
*array = last;
--offset;
}
}
int main()
{
int arr[20];
int i, n, offset;
//输入数组大小和数组内容
cout << "Total numbers:";
cin >> n;
cout << "Input" << n << "numbers." << endl;
for (i = 0; i < n; i++)
cin >> arr[i];
//输入滚动偏移量
cout << "Set your offset." << endl;
cin >> offset;
cout << "Offset is" << offset << "." << endl;
//打印滚动前数组
print_arr(arr, n);
//滚动数组并打印
move(arr, n, offset);
print_arr(arr, n);
}
C++运行结果: