第一次写,写个简单的试下水,简单的c语言移动数据问题

本文介绍了一个简单的数组旋转问题,通过C语言实现了一种有效的数组旋转方法。具体来说,首先将数组后m个元素复制到临时数组,然后将剩余元素向前移动m个位置,最后将临时数组的内容放回原数组开头,实现了数组的旋转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有点偷懒了,把面试题搬了过来

移动数据

题目描述

输入n个整数(不超过10),使前面各数顺序后移m个位置,最后m个数变成最前面的m个数(m<n),写一个函数实现上述功能。

在main函数中调用该函数,最后分行输出移动后的n个数,每个数占一行。

输入输出都在main函数中进行。

n和m以及n个数都需要从键盘上进行输入。

输入

输入分三行

第一行输入一个数字(假设该数字以n表示,不超过10),表示要输入的数据个数

第二行输入以空格分隔的n个数

第三行输入后移的位置(假设该数字以m表示,m<n)

输出

分行输出移动后的数据,每个数字单独占一行。

样例输出

10
1 2 3 4 5 6 7 8 9 0
3


 

 

 

样例输出

8
9
0
1
2
3
4
5
6
7

我的想法很简单,在main函数里里获取n,m和输入的数据,在change函数里完成数据的移动。

#include<stdio.h>
void change (int a[10],int n,int m);
int main(void)
{
    int n,m,i;
    int a[20];
    printf("请输入数据的个数:\n");
    scanf("%d",&n);
    printf("请输入数据:\n");
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    printf("需要移动的数的个数:\n");
    scanf("%d",&m);
    printf("\n");
    change(a,n,m);
    for(i=0;i<n;i++){
        printf("%d",a[i]);
        if(i<n-1)
            printf("\n");
    }
    return 0;
}
void change (int a[10],int n,int m)
{
    int b[20];
    int j;
    for(j=0;j<m;j++){
        b[j]=a[n-m+j];
    }
    /*这一步的目的是把a数组中后m项复制到b数组的前m项*/
    for(j=n-1;j>=m;j--){
        a[j]=a[j-m];
    }
    /*这一步是a数组中前m项后复制到b数组后n-m项*/
    for(j=0;j<m;j++){
        a[j]=b[j];
    }
    /*这一步的目的是用是a数组变成所需要的*/
    /*因为用的是void函数 所以不需要返回值了*/
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值