【发布时间】:2016-11-23 21:57:10
【问题描述】:
https://www.hackerrank.com/challenges/ctci-array-left-rotation
对大小为 n 的数组的左旋转操作将数组的每个元素向左移动 1 个单位。例如,如果对数组 [1,2,3,4,5] 执行 2 次左旋转,则数组将变为 [3,4,5,1,2]
执行 k 次旋转并打印。
这是我到目前为止得到的,但它只通过一次交互,看不出我做错了什么
int main(){
int n; //size
int k; //number of rotations
int a_i; //index
scanf("%d %d",&n,&k);
int *a = malloc(sizeof(int) * n); //input array
for(a_i = 0; a_i <= n; a_i++){
scanf("%d",&a[a_i]);
}
int temp;
for(a_i = 0; a_i <= k; a_i++){
temp = a[0];
for(a_i = 0; a_i < n-1; a_i++) {
a[a_i] = a[a_i+1];
}
a[a_i] = temp;
}
for(a_i = 0; a_i < n; a_i++){
printf("%d ", a[a_i]);
}
return 0;
}
【问题讨论】:
-
由于唯一重要的是程序的输出,因此您甚至不需要旋转数组的内容。只需从
k打印到n-1,然后从0打印到k-1。