|
发表于 2020-7-18 08:30:01
|
显示全部楼层
我的办法是一个一个位置的覆盖
#include <stdio.h>
//a[0]没有用,a[]有 n+1个元素
void cycle(int a[],int k,int n)
{
int i, j;
int tmp, cur,next;
j=cur=n;
tmp=a[cur];
for(i=0;i<k;i++)
{
for(;j>k;j-=k)
a[j]=a[j-k];
next=j+n-k;
if(next==cur)
{
a[j]=tmp;
cur--;
j=cur;
tmp=a[j];
}
else
{
a[j]=a[next];
j=next;
}
}
}
void main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
int k;
scanf("%d",&k);
cycle(a,k,9);
for(int i=1;i<10;i++)
printf("%d\t",a[i]);
} |
|