当前位置:网站首页>PTA 习题2.2 数组循环左移
PTA 习题2.2 数组循环左移
2022-08-10 08:24:00 【盖世馒头】
题目
本题要求实现一个对数组进行循环左移的简单函数:一个数组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
1、循环队列法
利用循环队列的思想,可以简单地做出来
#include<stdio.h>
int main(){
int front=0,rear=0,size;
scanf("%d%d",&size,&front);
int arr[size];
rear=front-1;
for(int i=0;i<size;i++)
scanf("%d",&arr[i]);
for(int i=front;i<front+size;i++){
if(i==front)
printf("%d",arr[i%size]);
else
printf(" %d",arr[i%size]);
}
return 0;
}
2、逆转法
分别先对前半部分和后半部分进行逆转,然后再对整个数组进行逆转。
#include<stdio.h>
void reverse(int arr[],int start,int end){
while(start<end){
int temp=arr[start];
arr[start]=arr[end];
arr[end]=temp;
start++;
end--;
}
}
int main(){
int size,movements;
scanf("%d%d",&size,&movements);
movements=movements%size;
int arr[size];
for(int i=0;i<size;i++)
scanf("%d",&arr[i]);
reverse(arr,0,movements-1);
reverse(arr,movements,size-1);
reverse(arr,0,size-1);
for(int i=0;i<size;i++){
printf("%d",arr[i]);
if(i<size-1)
printf(" ");
}
return 0;
}
边栏推荐
- 大佬们,请问一下,oraclecdc报错没有序列化,可是我看源码中的确是没有继承序列化的,是什么原因
- 快速输入当前日期与时间
- Rust学习:6.1_复合类型之切片
- PLSQL学习第二天
- 初使jest 单元测试
- iwemeta metaverse: a doll sells for 9999 yuan, and Bubble Mart thinks it is not expensive at all
- Binary tree --- heap
- m.bjhjwy.com全面教学设备 类型包括: 教学仪器, 教学设备 ,
- Different command line styles
- 【Unity入门计划】Collision2D类&Collider2D类
猜你喜欢
随机推荐
PLSQL学习第四天
协同工具满足70%-90%的工作需求,成为企业香饽饽
11111
Rust学习:6.4_复合类型之枚举
明明加了唯一索引,为什么还是产生重复数据?
神经网络的三种训练方法,神经网络训练全过程
第十六天&charles的基本操作
硬件工程师90天学习资料及笔记汇总
ShardingSphere入门
Process management (dynamic)
Unity—UGUI control
PLSQL学习第一天
90.(cesium之家)cesium高度监听事件
解决win10win7win8系统找不到指定的模块,注册不了大漠插件的问题
nrm 使用详解
VS2013-调试汇编代码-生成asm文件-结构体内存布局-函数参数压栈-调用约定
数据库公共字段自动填充
uni 小程序腾讯地图polygon背景透明度
初使jest 单元测试
How AliExpress sellers seize product search weight