C语言大神求救! 将一维数组中的元素向右循环移动k次

输入数据有多组,每组数据由两行组成,第一行是k和n,第二行n个整数的数列,数列中的元素以空格隔开。k和n同时为0标示输入数据的结束,本行不做处理。
对于每组测试实例,输出循环移动后的数列,数列中的元素以空格隔开。
输入样例
2 3
0 1 2

输出样例
1 2 0

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
int i,k,n;
int *a;

while(scanf("%d%d",&k,&n)!=EOF)//接受k,n
{
if(n==0)break; //如果n为0,我觉得直接就结束吧,别管k了
a=(int*)malloc(sizeof(int)*n);//分配数组
if(a==NULL)break;//内存分配失败退出,不大会
for(i=0;i<n;i++)
scanf("%d",a+i);//接受数组
if(k==0)//没移动
{
for(i=0;i<n-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[i]);//担心最后多个空格,单独输出
}
k%=n;//循环的,移n+1次和移1次效果是一样的
//下面就是从a[k-1]和a[k]中间切一刀,先输出后半,再输前半
for(i=n-k;i<n;i++)
printf("%d ",a[i]);
for(i=0;i<n-k-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[i]);//担心空格,最后一个单独输
free(a);//别忘了释放
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-14
什么意思?
第2个回答  2012-11-12
没意思,同一个问题你问多回啊,
我刚答过一把,这里又是你的同一问题, 不重写代码了,你自己找找