1008 数组元素循环右移问题

在这里插入图片描述

1008 数组元素循环右移问题

  • 题目描述
  • 解题思路
  • 代码

题目描述

点击直达题目链接
1008 数组元素循环右移问题_第1张图片

解题思路

本题方法较多,博主就讲一个做法。

首先题目要求是不能使用另一个数组。
我们每次都右移一个数字,在右移的开始前,先保存最右边的数字,然后进行覆盖,最后把保存的数字再覆盖给首元素,这是第一次右移。后面的每一次都是这样实现的,可以递归实现。

1008 数组元素循环右移问题_第2张图片
还有一个思路:1.全部逆序,2.前面n个逆序,剩余后面的逆序。
读者自己实现一下,用库函数更简单一些

代码

#include 
#include 
#include 
void f(int* arr,int m,int n)
{
	int temp = arr[m-1];
	int i = 0;
	if (n == 0)
		return;
	for (i = m; i >0; i--)//从后往前覆盖
	{
		arr[i-1] = arr[i -2];
	}
	arr[0] = temp;//让最后一个回到第一个位置
	f(arr, m, n-1);//下一次右移
}
int main()
{
	int m, n;
	scanf("%d%d", &m, &n);
	int* arr = (int*)malloc(m * sizeof(int));
	assert(arr);
	int i = 0;
	for (i = 0; i < m; i++)
	{
		scanf("%d", arr + i);
	}
	f(arr,m, n);
	for (i = 0; i < m; i++)
	{
		printf("%d", arr[i]);
		if (i != m - 1)
			printf(" ");
	}
	free(arr);
	arr = NULL;
	return 0;
}

在这里插入图片描述

你可能感兴趣的:(PAT乙级刷题笔记,c语言,开发语言,后端)