有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。
#include <stdio.h>void main()
{
int m,*p,t,i,j;
int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("请输入要移动的位数:");
scanf("%d\n",&m);
p=&a[9];
for(i=0;i<m;i++)
{
t=*p;
for(j=9;j>=i;j--)
a[j]=a[j-1];
a[i]=t;
}
for(i=0;i<10;i++)
printf("%4d",a[i]);
}
----------------解决方案--------------------------------------------------------
看了一下,主要犯了两个错误:
#include <stdio.h>
void main()
{
int m,*p,t,i,j;
int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("\n请输入要移动的位数:");
scanf("%d",&m);
p=&a[9];
for(i=0;i<m;i++)
{
t=*p;
for(j=9;j>=1;j--)
a[j]=a[j-1];
a[0]=t;
}
for(i=0;i<10;i++)
printf("%4d",a[i]);
}
----------------解决方案--------------------------------------------------------
再说用这种算法也太浪费时间了
----------------解决方案--------------------------------------------------------
再说用这种算法也太浪费时间了
哪种算法比较好?
----------------解决方案--------------------------------------------------------
直接输出是不是比较好?
#include <stdio.h>
#include <conio.h>
#define NUM 10
int main()
{
int m,t;
int a[NUM]={1,2,3,4,5,6,7,8,9,10};
printf("请输入要移动的位数:");
do
{
scanf("%d",&m);
}while((m>0)&&(m<=NUM)==0);
for (t=NUM-m;t<NUM;t++)
{
printf("%4d",*(a+t));
}
for (t=0;t<NUM-m;t++)
{
printf("%4d",*(a+t));
}
getch();
return 0;
}
----------------解决方案--------------------------------------------------------
谢谢回答 楼上的简单么 貌似没看出来 !
----------------解决方案--------------------------------------------------------
这算法应该算是比较简单的吧,代码少点,变量也少点,但需要多定义一个数组.
#include <stdio.h>
void main()
{
int m,i;
int a[10]={1,2,3,4,5,6,7,8,9,10};
int b[10];
printf("enter the number:");
scanf("%d",&m);
for(i=0;i<10;i++)
b[i]=a[(i+m)%10];
for(i=0;i<10;i++)
{ a[i]=b[i];
printf("%4d",a[i]);
}
}
----------------解决方案--------------------------------------------------------
我也是R。BAGGIO的忠实球迷,同样的感觉
I WILL COME BACK!!
# include<stdio.h>
void main()
{int m,t,i,j;
int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("input the num");
scanf("%d",&m);
for(i=0;i<m;i++)
{t=a[0];
for(j=0;j<9;j++)
a[j]=a[j+1];
a[9]=t;
}
for(i=0;i<10;i++)
printf("%4d",a[i]);
}
----------------解决方案--------------------------------------------------------
我也来一个,移动的时候都不用循环,这个算法应该比较省时间哦
#include <stdio.h>
void main()
{
int m,*p,t,i,j;
int tmp[10];
int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("\n请输入要移动的位数:");
scanf("%d",&m);
memcpy(tmp, a, (10-m) * sizeof(int));
memcpy(a, a+10-m, m*sizeof(int));
memcpy(a+m, tmp, (10-m)*sizeof(int));
for(i=0;i<10;i++)
printf("%4d",a[i]);
}
----------------解决方案--------------------------------------------------------