解题思路:移动次数作为解题关键,相当于以移动次数-1的下标为界限划为两部分人进行两次反转排序
注意事项:当移动次数大于数组大小n时着前n遍移动无效,所以要求得真正的移动次数
参考代码:
#include<stdio.h>
#include<stdlib.h>
//输出函数
void output(int *number,int number_cent)
{
for(int i=0;i<number_cent;i++)
printf("%d ",number[i]);
}
//主函数
int main ()
{
int k,n,m;
scanf("%d",&n);//首先接收n用来动态内存分配,避免number数组过大或者过小
int *number=malloc(n * sizeof(int));
//接收number数组元素
for (int i = 0; i < n; i++)
{
scanf("%d",&number[i]);
}
scanf("%d",&k);
//第一次反转全部反转,移动相当于将后数移动到前,我们不妨先倒叙而后再重新建立顺序
m=n-1;
for (int i = 0; i < n/2; i++,m--)
{
int temp;
temp=number[i];
number[i]=number[m];
number[m]=temp;
}
k=k%n;
//第二次反转k部分
m=k-1;
for (int i = 0; i < k/2; i++,m--)
{
int temp;
temp=number[i];
number[i]=number[m];
number[m]=temp;
}
//第三次反转n-k部分
m=n-1;
for (int i = 0,b=k; i < (n-k)/2;b++,i++,m--)
{
int temp;
temp=number[b];
number[b]=number[m];
number[m]=temp;
}
output(number,n);
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复