当前位置: 代码迷 >> C语言 >> 我这个程序错在那里?望诸位帮帮我 谢谢
  详细解决方案

我这个程序错在那里?望诸位帮帮我 谢谢

热度:116   发布时间:2007-07-22 21:56:40.0
我这个程序错在那里?望诸位帮帮我 谢谢

有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]);
}

搜索更多相关的解决方案: int  void  main  整数  

----------------解决方案--------------------------------------------------------

看了一下,主要犯了两个错误:
#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]);
}


----------------解决方案--------------------------------------------------------

再说用这种算法也太浪费时间了


----------------解决方案--------------------------------------------------------
以下是引用anlogo在2007-7-22 22:28:35的发言:

再说用这种算法也太浪费时间了

哪种算法比较好?


----------------解决方案--------------------------------------------------------
直接输出是不是比较好?

#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]);
}


----------------解决方案--------------------------------------------------------
  相关解决方案