具体问题看图,小白一个,求指教
int main()
{
int N;
scanf("%d", &N);
int * dat = (int *)malloc(sizeof(int) * N);
for (int i = 0; i < N; i++) scanf("%d", &dat[i]);
int shiftN;
scanf("%d", &shiftN);
for (int i = 0; i < shiftN; i++)
{
int temp = dat[N - 1];
for (int j = N - 1; j > 0; j--) dat[j] = dat[j - 1];
dat[0] = temp;
}
for (int i = 0; i < N; i++) printf("%d ", dat[i]);
}
http://codepad.org/6Tk6Px5n
在线测试
4 5 1 2 3
上面这种方法用的是动态数组,因为你不知道需要创建的数组有多长,当然你也可以#define LEN 1024,定义个大的数组长度,然后用静态数组的方法做。
# include<stdio.h>
#include<stdlib.h>
int * create_array(int);
void init_array(int *, int);
void traversal_array(int *, int, int);
int main(void)
{
int len = 0, point = 0;
int * arr = NULL;
scanf("%d",&len);
arr = create_array(len);
init_array(arr, len);
scanf("%d",&point);
traversal_array(arr, len, point);
return 0;
}
int * create_array(int len)
{
int * arr = (int *)malloc(sizeof(int)*len);
return arr;
}
void init_array(int * arr,int len)
{
int i = 0;
for(i = 0; i < len; i++){
scanf("%d",&arr[i]);
}
}
void traversal_array(int * arr, int len, int point)
{
int i = 0;
for(i = len - point; i < len;i++){
printf("%d ",arr[i]);
}
for(i = 0; i < len - point; i++){
printf("%d ",arr[i]);
}
}
严格来说,我那个没有移动只是造成效果上实现了而已,你将上面俩个代码合并一下,取长补短就能达到要求了。
第一个人回答的思路是对的,你不要因为别人代码,不能运行就说人家错。只不过他的代码有int i重定义的问题,修改一下就行。并且C中定义变量必须在
最开始定义,执行语句之后就不能定义了。对其稍作修改如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int N;
int * dat;
int shiftN;
int i,j;
scanf("%d", &N);
dat = (int *)malloc(sizeof(int) * N);
for (i = 0; i < N; i++) scanf("%d", &dat[i]);
scanf("%d", &shiftN);
for (i = 0; i < shiftN; i++)
{
int temp = dat[N - 1];
for (j = N - 1; j > 0; j--) dat[j] = dat[j - 1];
dat[0] = temp;
}
for (i = 0; i < N; i++) printf("%d ", dat[i]);
}