2019-01-23-PAT乙级-1008-数组元素循环右移问题
原文链接:1008 数组元素循环右移问题
github代码地址:HibisciDai/OJ-PAT-ACM
2019-01-23-PAT乙级-1008-数组元素循环右移问题
编程描述
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由($A{0}$ $A{1}$ ⋯ $A{N-1}$)变换为($A{N-M}$ ⋯ $A{N-1}$ $A{0}$ $A{1}$ ⋯ $A{N-M-1}$)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
辅助描述
1 2 3 4 5
| 作者: DS课程组 单位: 浙江大学 时间限制: 400 ms 内存限制: 64 MB 代码长度限制: 16 KB
|
输入格式
每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。
输出格式
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例
输出样例
算法实现
JAVA(openjdk)
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| import java.util.Scanner;
public class Main { public static Scanner sc = new Scanner(System.in);
public static void main(String[] args) { int N = sc.nextInt(); int M = sc.nextInt(); int[] inputInt = new int[N]; int[] outputInt = new int[N];
for (int i = 0; i < N; i++) { inputInt[i] = sc.nextInt(); }
sc.close();
for (int i = N - 1; i >= 0; i--) { outputInt[(i + M) % N] = inputInt[i]; }
System.out.print(outputInt[0]); for (int i = 1; i < N; i++) { System.out.print(" " + outputInt[i]); } } }
|
运行结果
1 2 3 4 5 6 7 8
| 状态 分数 题目 编译器 耗时 用户 答案正确 20 1008 Java (openjdk) 148 ms HibisciDai 测试点 结果 耗时 内存 0 答案正确 148 ms 11416 KB 1 答案正确 134 ms 11456 KB 2 答案正确 126 ms 11384 KB 3 答案正确 123 ms 11416 KB 4 答案正确 140 ms 11748 KB
|
C
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #include <stdio.h>
int main() { int i; int n; int m; char ch = ' '; int arr[100];
scanf("%d", &n); scanf("%d", &m); m = m % n;
for(int i=1; i<=n; i++) { scanf("%d",&arr[i]); }
for (i=n-m+1; i<=n; i++) { printf("%d ", arr[i]); }
for(int i=1; i<=n-m; i++) { if (i == (n - m)) { ch = '\n'; }
printf("%d%c", arr[i], ch); }
return 0; }
|
运行结果
1 2 3 4 5 6 7 8
| 状态 分数 题目 编译器 耗时 用户 答案正确 20 1008 C (gcc) 2 ms HibisciDai 测试点 结果 耗时 内存 0 答案正确 2 ms 256 KB 1 答案正确 1 ms 384 KB 2 答案正确 2 ms 256 KB 3 答案正确 1 ms 256 KB 4 答案正确 2 ms 384 KB
|