C语言将数组元素全体移动k次

C语言将数组元素全体移动k次,这里以左移动为例。

#include <stdio.h>
#include<string.h>
#include<stdlib.h>
void reverse(int a[],int k,int n);
void leftMove(int a[],int k,int n);
int main()
{
    int k, n, i, *arr;
    printf("请问要输入几个整数?\n");
    scanf("%d", &n);
    //动态分配内存空间 
    arr = (int *)malloc(n*sizeof(int));
    printf("请输入%d个整数:\n",n);
    for(i = 0; i < n; i++){
        scanf("%d", arr+i);
    }
    printf("请问要左移动几次?\n");  
    scanf("%d", &k);
    /*
    方法一的思路:
        假设数组长度为n=6,位移k=3,a[]={1,2,3,4,5,6} ;
     1,嵌套循环的内循环是数组整体左移动一个。{2,3,4,5,6,1} 
     2,外循环控制全部元素左移动个数 。{4,5,6,1,2,3} 
    */    
    leftMove(arr,k,n);  
/*
    方法二的思路:
        假设数组长度为n=6,位移k=3,a[]={1,2,3,4,5,6} ; 
    1,先逆置数组前K个元素;    {3,2,1,4,5,6}

         reverse(arr,0,k-1);

    2,再逆置数组后n-k个 元素 ; {3,2,1,6,5,4}

         reverse(arr,k,n-1);

    3,最后逆置整个数组 {4,5,6,1,2,3}

         reverse(arr,0,n-1);
*/
   

  printf("左移动%d次后的数组为:\n",k);
    for(i=0;i<n;i++){
        if(i!=(n-1)){
            printf("%d,",arr[i]);
        }else{
            printf("%d",arr[i]);
        }
        
    }
    return 0;
}
void reverse(int a[],int start,int end){
    int temp,i;
    for(i=0;i<(end-start+1)/2;i++){
        temp = a[start+i];
        a[start+i] = a[end-i];
        a[end-i] = temp;
    }
}
void leftMove(int a[],int k,int n){
    int i,j;
        for(i = 0; i < k; i++)
    {
        int temp;
        temp = a[0];
        for(j = 0; j < n-1; j++)
            a[j] = a[j+1];
            a[n-1] = temp;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值