iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c语言实现数组循环左移m位
  • 773
分享到

c语言实现数组循环左移m位

2024-04-02 19:04:59 773人浏览 独家记忆
摘要

目录C语言数组循环左移m位数组循环左移的简单方法输入格式输出格式c语言数组循环左移m位 #include<stdio.h> //函数原型 void rightshiftl

c语言数组循环左移m位

#include<stdio.h>
//函数原型
void rightshiftleft(int *p_num,int n,int m);
void enterint(int *p_num,int n);
//主函数
void main(){
	int num[100] = {1,2,3,4,5},*p_num = num;
	int n = 5,m = 2;
	printf("Int =:");
	scanf("%d",&n);
	printf("M =:");
	scanf("%d",&m);
	//整数输入
	enterint(p_num,n);
	//数组左移
	rightshiftleft(p_num,n,m);
	for(int i = 0; i < n; i++){
	printf("%-5d",p_num[i]);
	}

}

//整数输入
void enterint(int *p_num,int n){
	for(;n > 0 ; n--){
	scanf("%d",p_num++);
	}
}

//循环数组左移算法
void rightshiftleft(int *p_num,int n,int m){
	//临时变量
	int temp = 0;
	//外层循环控制需要左移的次数
	for(int k = 0;k < m ; k++){

		temp = p_num[n - m + k];
		//内层循环控制n-m的数组元素整体右移一位
		for(int i = 0; i < n - m ; i++){
			p_num[n -m -i+ k] = p_num[n - m -1 -i +k];
		}
		p_num[k] = temp;
	}
}

数组循环左移的简单方法

本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a0a1…an-1)变换为(am…an-1a0a1…am-1)(最前面的m个数循环移至最后面的m个位置)。如果还需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

输入格式

输入第1行给出正整数n(≤100)和整数m(≥0);第2行给出n个整数,其间以空格分隔。

输出格式

在一行中输出循环左移m位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

输入样例

8 3
1 2 3 4 5 6 7 8

输出样例

4 5 6 7 8 1 2 3

代码如下:

#include<stdio.h>
int main()
{
    int n,m,i;
    scanf("%d%d",&n,&m);//获取n和m的值
    if(m>n)
        m=m%n;//去掉多余无意义的左移次数
    int a[n];
    for(i=n-m;i<n;i++)//先从左移后的位置开始存
        scanf("%d",&a[i]);
    for(i=0;i<n-m;i++)//再从a[0]往后存
        scanf("%d",&a[i]);
    for(i=0;i<n;i++)//输出数组中的各个元素
    {
        printf("%d",a[i]);
        if(i!=n-1)//这样是为了让结尾没有空格
            printf(" ");
    }
    return 0;
}

然后说一下这题的思路,题目的要求其实就是将数组左移m位,然后输出。

那么,我们其实可以先算出a[0]移动后的位置就是a[n-m](如输入样例中的8 3,左移三位后,a[0]元素的位置其实就移动到a[5]了),所以第一个for循环输入的是a[m-n]到a[n-1]的值,然后第二个for循环再从a[0]接着输入到a[m-n-1],最后再直接输出整个数组即可。

关于m>n的情况:当m>n的时候,我们可以发现,其实要左移的位置就是m%n(如n=3,m=4,其实就只需要左移4%3=1次),因为3个数左移3位还是本身,所以我们只需要在前面加一个判断,当m>n的时候,m=m%n就可以去掉多余无意义的左移。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: c语言实现数组循环左移m位

本文链接: https://www.lsjlt.com/news/164969.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c语言实现数组循环左移m位
    目录c语言数组循环左移m位数组循环左移的简单方法输入格式输出格式c语言数组循环左移m位 #include<stdio.h> //函数原型 void rightshiftl...
    99+
    2024-04-02
  • C/C++如何实现循环左移,循环右移
    目录实现对一个无符号数的循环左移和循环右移循环移位直接可用的函数(循环右移、循环左移)整体代码本文的小技巧注意的地方字符串循环左|右移实现(C/C++)字符串循环右移K位字符串循环左...
    99+
    2024-04-02
  • 数组循环移位操作实例
    题: 如标题,要求时间复杂度为O(N)。解法:右移k位,前k位逆序,后N-k位逆序,再整个逆序即可。复制代码 代码如下:#include <stdio.h> &...
    99+
    2022-11-15
    数组 循环 移位
  • C语言如何实现数组移位、前移、后移与整体移动
    这篇文章主要介绍“C语言如何实现数组移位、前移、后移与整体移动”,在日常操作中,相信很多人在C语言如何实现数组移位、前移、后移与整体移动问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言如何实现数组移位、前...
    99+
    2023-07-05
  • c语言怎么循环加数组实现汉诺塔
    今天小编给大家分享一下c语言怎么循环加数组实现汉诺塔的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。简介汉诺塔问题是学数据结构...
    99+
    2023-06-29
  • c语言循环加数组实现汉诺塔问题
    目录简介递归的汉诺塔解法(c语言)循环实现汉诺塔问题(c语言)简介 汉诺塔问题是学数据结构与算法的时候会遇到的问题,相信来看本文的读者应该都对汉诺塔问题有基本的了解,理论上所有的递归...
    99+
    2024-04-02
  • C语言实现循环双链表
    本文实例为大家分享了C语言实现循环双链表的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #...
    99+
    2024-04-02
  • C语言中如何实现for循环
    这篇文章主要介绍“C语言中如何实现for循环”,在日常操作中,相信很多人在C语言中如何实现for循环问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中如何实现for循环”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-17
  • C语言如何实现循环输入
    目录C语言实现循环输入根据次数循环输入根据条件循环输入C语言之循环语句一. while 二. for三. do while四. goto语句总结C语言实现循环输入 根据次数...
    99+
    2023-02-05
    C语言循环输入 C语言循环 C循环输入
  • C语言实现顺序循环队列实例
    目录一、队列和循环队列基本概念二、代码实操总结一、队列和循环队列基本概念 队列: 和栈相反,队列是一种先进先出(FIFO)的线性表。只允许在一端插入,在另一端删除。 允许插入的叫&...
    99+
    2024-04-02
  • C语言选择、循环、函数、数组与操作符
    目录1、选择语句2、循环语句3、函数4、数组5、操作符5、单目操作符6、关系操作7、逻辑操作符8、条件操作符9、逗号表达式10、下标引用、函数调用和结构成员1、选择语句 如果你好好学...
    99+
    2024-04-02
  • C语言怎么实现循环双链表
    这篇文章主要介绍“C语言怎么实现循环双链表”,在日常操作中,相信很多人在C语言怎么实现循环双链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么实现循环双链表”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-25
  • c语言怎么用for循环给数组赋值
    在C语言中,可以使用for循环给数组赋值。以下是一个示例:```c#include #define SIZE 5int main()...
    99+
    2023-09-04
    c语言
  • C语言用循环单链表实现约瑟夫环
    用循环单链表实现约瑟夫环(c语言),供大家参考,具体内容如下 源代码如下,采用Dev编译通过,成功运行,默认数到三出局。 主函数: main.c文件 #include <s...
    99+
    2024-04-02
  • C语言如何实现顺序循环队列
    这篇文章将为大家详细讲解有关C语言如何实现顺序循环队列,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、队列和循环队列基本概念队列:和栈相反,队列是一种先进先出(FIFO)的线性表。只允许在一端插入,在另...
    99+
    2023-06-29
  • C语言选择、循环、函数、数组与操作符实例分析
    本篇内容介绍了“C语言选择、循环、函数、数组与操作符实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、选择语句如果你好好学习,校招时...
    99+
    2023-06-30
  • C语言实现带头双向循环链表
    目录前言1. 创建结构体2.malloc新节点3.创建哨兵位节点4.尾插5.打印6.尾删7.头插8.在指定位置pos的前面进行插入9. 删除指定位置pos节点10.销毁链表前言 在...
    99+
    2024-04-02
  • C语言实现循环队列基本操作
    循环队列依靠取模运算,实现队列中数据元素的逻辑成环操作。其相比队列的顺序存储实现,可以避免“假溢出”的问题。 头文件声明 #include <stdio.h> #in...
    99+
    2024-04-02
  • C语言中循环语句练习实例
    计算n的阶乘 int main() { int i=0; int ret=1; scanf("%d",&i); for(i=1;i<=n;i++) { ret=ret*...
    99+
    2024-04-02
  • c语言怎么循环判断素数
    C语言循环判断素数的一种常见方法是使用嵌套循环。具体步骤如下: 首先,定义一个变量num,用于接收输入的数字。 然后,使用嵌套循环...
    99+
    2023-10-21
    c语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作