PAT---1008数组元素循环右移问题
来源:互联网 发布:手机淘宝怎么看淘金币 编辑:程序博客网 时间:2024/05/16 18:46
编程是一种美德,是促使一个人不断向上发展的一种原动力。
一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN-1)变换为(AN-M …… AN-1 A0 A1……AN-M-1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
输入格式:每个输入包含一个测试用例,第1行输入N ( 1<=N<=100)、M(M>=0);第2行输入N个整数,之间用空格分隔。
输出格式:在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例:6 21 2 3 4 5 6
输出样例:5 6 1 2 3 4
注:这里介绍3种解法:
1> 大型数组强行后移
2> 翻转数组
3> 选择好位置输入元素
解法一:本方法是刚做时想到的,没什么普遍性,主要思路在于定义一个大型数组,元素后移,然后将最后M个元素覆盖前M个元素即可,
本方法收获在于很精准的了解到了N, M 在数组中移动时候的改变,对数组存储有了一个新的理解。
#include <stdio.h>#include <iostream>using namespace std;int main(){//数据的初始化int N, M, i, j, A[3000], myswap;scanf("%d %d", &N, &M); for(i = 1; i <= N; i++) cin>>A[i];M &= N; //数组后移 for(i = 0; i < M; i++) for(j = N + i; j >= 1; j--) A[j + 1] = A[j]; //交换元素 for(i = 1; i <= M; i++) A[i]= A[N + i]; for(i = 1; i <= N - 1; i++) cout<<A[i]<<" "; cout<<A[N];return 0;}
注意:本人写完后怎么也提交不对,后来才知道要加 m%= n;这是因为若移动次数大于N,本方法就会出现输出不存在的数,读者自己分析就懂了,下面也是
解法二:翻转数组,本方法在于点拨如何交换数字,读者自己看,对知识拓展有帮助
#include <algorithm>#include <iostream>using namespace std;void reswap(int a[], int b, int e){ while(b < e){ swap(a[b], a[e]); b++; e--; }}int main(){ int i, n, m; int *a = new int[n]; //真正的牛人就应该只定义N个字节内存 cin>>n>>m; m %= n; for(i = 0; i < n; i++) cin>>a[i]; //颤抖吧!reswap(a, i, j)函数功能是让a数组中i到j的元素都交换 reswap(a, 0, n - m - 1); reswap(a, n - m, n - 1); reswap(a, 0, n - 1); for(i = 0; i < n - 1; i++) cout<<a[i]<<" "; cout<<a[n - 1]<<endl;}
解法三:确定输入位置,这种方法反正我这种菜鸟没想到,后来看别人用JAVA写的才焕然大悟,这也告诉我,别一直用你那种垃圾方法了,真正的世界太大了
#include <iostream>using namespace std;int main(){ int i = 0, j = 0, n, m; cin>>n>>m; int *a = new int[n]; //沉迷于new对象无法自拔 m %= n; //这里存在移动位置大于m for(; i < n; i++){ if(i + m < n) cin>>a[i + m]; else cin>>a[j++]; } for(i = 0; i < n - 1; i++) cout<<a[i]<<" "; cout<<a[n - 1]; return 0;}
阅读全文
0 0
- PAT数组元素循环右移问题
- pat数组元素循环右移问题
- PAT basic 1008 : 数组元素循环右移问题
- PAT 1008 数组元素循环右移问题
- PAT 1008 数组元素循环右移问题
- 1008 数组元素循环右移问题 PAT
- PAT-1008 数组元素循环右移问题
- PAT乙级1008: 数组元素循环右移问题 (20)
- PAT(basic level) 1008 数组元素循环右移问题
- PAT 1008 数组元素循环右移问题
- PAT乙级1008 数组元素循环右移问题
- PAT 1008 数组元素循环右移问题
- PAT——1008数组元素循环右移问题
- PAT---1008数组元素循环右移问题
- PAT 1008 数组元素循环右移问题
- PAT 1008数组元素循环右移
- PAT 1008. 数组元素循环右移问题 (20)
- PAT - 1008. 数组元素循环右移问题 (20)
- unix时间转化成普通时间
- 凯撒密码
- 【数据库--mongodb】3.MongoDB基本操作(总结)
- jQuery2.0.3源码分析
- oracle 系统操作语句(持续更新中...)
- PAT---1008数组元素循环右移问题
- 04_RxJava 组合操作符示例
- eclipse maven install 没反应
- readAsBinaryString polyfill
- 小脚本获取spring mvc的值
- java 模拟文件下载
- 什么是this指针?this指针在背后默默的付出了什么?
- 欢迎使用CSDN-markdown编辑器
- 设计模式(29)-前端控制器模式