发布网友
共3个回答
热心网友
#include <stdio.h>
void main()
{
int i,i2,k,k2,n,m,a[20],tmp,tmp2,j=0;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
a[i] = i+1;
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\r\n");
/********转换开始*****************/
if(n%m==0)
{
i2 = n/m;
k2 = m;
}
else
{
i2 = n;
k2 = 1;
}
for(k=0;k<k2;k++)
{
tmp = a[k];
j = k;
for(i=0;i<i2;i++)
{
j = j+n-m;
j = j%n;
tmp2 = a[j];
a[j] = tmp;
tmp = tmp2;
}
}
/********转换结束*****************/
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\r\n");
}
本来还有一个递归的方案 不过写起来太复杂 不好理解 参数太多
热心网友
#include <stdio.h>
int main(void){
int i,j,t,s[100],nn,mm;
printf("Input nn & mm(int 0<nn<=100,mm>0)...\n");
if(scanf("%d%d",&nn,&mm)!=2 || nn<1 || nn>100 || mm<1){
printf("Input error, exit...\n");
return 0;
}
for(i=0;i<nn;scanf("%d",s+i++));
for(i=0;i<mm;i++){
for(t=s[0],j=1;j<nn;s[j-1]=s[j++]);
s[j-1]=t;
}
for(i=0;i<nn;printf(i<nn-1 ? "%d " : "%d\n",s[i++]));
return 0;
}
追问大神,能简单讲一下思路吗?
热心网友
算法:
(1)arr[0..mm-1]之间的元素逆置;
(2)arr[mm..nn-1]之间的元素逆置;
(3)arr[0..nn-1]之间的元素逆置。
C语言程序:
#include "stdio.h"运行测试:
8 3