1008 数组元素循环右移问题

简介: 1008 数组元素循环右移问题

题目描述

点击直达题目链接

解题思路

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

首先题目要求是不能使用另一个数组。

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

还有一个思路:1.全部逆序,2.前面n个逆序,剩余后面的逆序。
读者自己实现一下,用库函数更简单一些

代码

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
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;
}

相关文章
|
9月前
|
编译器 C++
C++下标运算符详解
使用第一种声明方式,[ ]不仅可以访问元素,还可以修改元素。使用第二种声明方式,[ ]只能访问而不能修改元素。在实际开发中,我们应该同时提供以上两种形式,这样做是为了适应 const 对象,因为通过 const 对象只能调用 const 成员函数,如果不提供第二种形式,那么将无法访问 const 对象的任何元素。下面我们通过一个具体的例子来演示如何重载[ ]。
39 0
|
1月前
|
存储 C语言
【03】逆序数组
【03】逆序数组
|
1月前
|
程序员 C++ 索引
c++数组元素与讲解
c++数组元素与讲解
24 0
|
1月前
|
索引
数组下标为什么从0开始
数组下标为什么从0开始
|
10月前
|
前端开发
数组下标对应缺位问题
数组下标对应缺位问题
35 0
剑指offer 57. 数组中数值和下标相等的元素
剑指offer 57. 数组中数值和下标相等的元素
73 0
剑指offer 57. 数组中数值和下标相等的元素
|
11月前
1181:整数奇偶排序
1181:整数奇偶排序
|
数据处理
整数数组中最大子数组的和(2)—— 处理二维数组
将二维转化为一维处理,当子矩阵的上下行确定时,把上下行中每一列的数据当作一个单元,确定左右列的过程就是求以列为单元的一维数组的子数组最大和的过程,这种方法大大提高了效率
71 0
整数数组中最大子数组的和(2)—— 处理二维数组
|
Java
求整数数组中最大子数组的和(1)
绝大部分同学都已经做出来了单维数组的 求数组中最大子数组的和, 但是你不妨试一试:把你的程序编译为可执行文件, 然后执行 例如 maxsum.exe 输出就是最大子数组的和, 上面的例子就应该输出 16.
93 0
求整数数组中最大子数组的和(1)