格式错误 1008. 数组元素循环右移问题
原创
©著作权归作者所有:来自51CTO博客作者nkgines的原创作品,请联系作者获取转载授权,否则将追究法律责任
场景
- 使用 Python 解决 PAT . 1008, 提交后测试结果中存在 “格式错误” 问题。
- 分析、定位问题,提交正确结果。
问题描述
1008 . 数组元素循环右移问题 (20)
一个数组A中存有N(N>0)个整数 , 在不允许使用另外数组的前提下 ,将每个整数循环向右移 M(M>=0) 个位置,即将A中的数据由 (A0 A1……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 2
1 2 3 4 5 6
输出样例 :
5 6 1 2 3 4
思路
代码片 1 ( 格式错误 15分
# Python 1
nums_str=input().split(' ') # 读入数据
total,cout=int(nums_str[0]),int(nums_str[1])
num_lis=input().split(' ')
diff=total-cout%total if total<cout else total-cout
print(' '.join(num_lis[diff:total])+' '+' '.join(num_lis[0:diff])) # 结果数据
- 忽略 M 为 0 的情况,即 平移 0 个单位 .
- 因此,测试点中才会存在 格式错误
代码片 2 ( 正确结果 20分
# Python 2
nums_str=input().split(' ') # 读入数据
total,cout=int(nums_str[0]),int(nums_str[1])
num_lis,diff=input().split(' '),total-cout
print((' '.join(num_lis[diff:total])+' '+' '.join(num_lis[0:diff])).strip()) # 结果数据
代码片 3 ( 正确结果 20分
// C 语言
#include<stdio.h>
#include<stdlib.h>
// 平移函数
void shift_for_m(int tar[], int N, int M) {
int j=0,tmp=0;
if (M>N) { // 如果 M大于N,取余
M=M%N;
}
for(int i=0; i<M; i++){
tmp=tar[N-1]; // 尾数
for(j=N-2; j>=0; j--){ // 每次平移
tar[j+1]=tar[j];
}
tar[0]=tmp; // 首位赋值
}
}
// 打印函数
void print_arrays(int tar[], int size){
for(int j=0; j<size; j++){
printf(j==size-1 ? "%d" : "%d ", tar[j]);
}
}
int main(void){
int arrays[100],N=0,M=0;
scanf("%d %d", &N,&M); // 循环打印数据
for(int k=0; k<N; k++)
scanf("%d", &arrays[k]);
shift_for_m(arrays, N, M);
print_arrays(arrays, N);
return 0;
}