【C语言经典100例题-68】有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数

本文主要是介绍【C语言经典100例题-68】有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

方法一

        将原数组拆成两部分,前面n-m个数和后面m个数。首先将前面n-m个数逆序,然后将后面的m个数逆序。最后将整个数组逆序即可。

#include <stdio.h>void reverse(int arr[], int start, int end)
{for (int i = start, j = end; i <= (start + end) / 2; i++, j--){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
}void rotate(int arr[], int n, int m)
{reverse(arr, 0, n - m - 1); // reverse first n-m elementsreverse(arr, n - m, n - 1); // reverse last m elementsreverse(arr, 0, n - 1); // reverse the whole array
}int main()
{int n, m;printf("请输入整数的个数n和向后移动的位置m:\n");scanf_s("%d %d", &n, &m);int arr[] = { 0 };printf("请输入%d个整数:\n", n);for (int i = 0; i < n; i++) {scanf_s("%d", &arr[i]);}rotate(arr, n, m);printf("反转后的数组为: \n");for (int i = 0; i < n; i++)printf("%d ", arr[i]);return 0;
}

        首先定义了一个 reverse 函数,用来逆序数组的一部分,它的参数为数组,起始下标和结束下标。

        然后定义了一个 rotate 函数,用来旋转数组。它的参数为数组、数组的长度和旋转的数量。该函数先将前面的 n-m 个元素逆序,然后将后面的 m 个元素逆序。最后将整个数组逆序。

        在 main 函数中,定义了一个整数数组 arr,并将其长度和旋转数量分别设置为 7 和 2。然后调用 rotate 函数对数组进行旋转。最后打印出旋转后的数组。

方法二 

        函数shift接受一个整型数组arr、数组长度n和向后移动的位置m,先将后面的m个数保存到临时数组temp中,然后将前面n-m个数向后移动m个位置,最后将临时数组temp中的m个数放到数组arr的前面。main函数中读入整数个数和数组元素,并调用shift函数移动数组。 

#include <stdio.h>void shift(int arr[], int n, int m) {int temp[m];for (int i = n - m; i < n; i++) {temp[i - n + m] = arr[i];}for (int i = n - m - 1; i >= 0; i--) {arr[i + m] = arr[i];}for (int i = 0; i < m; i++) {arr[i] = temp[i];}
}int main() {int n, m;printf("请输入整数个数n和向后移动的位置m:");scanf("%d%d", &n, &m);int arr[n];printf("请输入%d个整数:", n);for (int i = 0; i < n; i++) {scanf("%d", &arr[i]);}shift(arr, n, m);printf("移动后的数组为:");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}

这篇关于【C语言经典100例题-68】有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1501

相关文章

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码