帮忙看一下这个程序,哪儿出问题了?

chg2008 2004-12-04 09:07:48
/*题目:有n个整数,使其前面各数顺序向后移m个位置,
最后m个数变成最前面的m个数*/
我的程序如下:
#include <stdio.h>
#define N 10
main()
{
int number[N],m,i,j,temp;
printf("the total numbers is: %d",N);
printf("back m:");
scanf("%d",&m);
for(i=0;i<N-1;i++)
 scanf("%d,",&number[i]);
for(i=0;i<m-1;i++)
{
temp=number[N-1];
for(j=N-1;j>0;j--)
number[j]=number[j-1];
number[0]=temp;
}
printf("the last numbers is:\n");
for(i=0;i<N;i++)
printf("%d, %d",i,number[i]);
}

为什么得不到正确结果呢?
...全文
96 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Michael_555 2004-12-05
  • 打赏
  • 举报
回复
第一个数移动到m+1的位置
第2个树----》 m+2
……
第m个数----》 m+m

第m+1……m+m移到1……m的位置。


for(i=0;i<m-1;i++)
{
temp=number[N-1];
for(j=N-1;j>0;j--)
number[j]=number[j-1]; //number[0]没有被移动到number[1]
number[0]=temp; //number[0]被number[N-1]覆盖
}


修改
for(i=0;i<m-1;i++)
{
temp=number[N-1];
for(j=N-1;j>=0;j--)
number[j]=number[j-1];
number[0]=temp;
}
xzhangyu 2004-12-05
  • 打赏
  • 举报
回复
楼主的错误在for(i=0;i<N-1;i++) 改为i<N或i<=N-1,不然按楼主的写法,只输入了9个数,最后一个数是随机数,for(i=0;i<m-1;i++)同理这里的后移也要少一次!而楼主后面的算法是对的!错误是这两个改了就对了哦!
iamwiner 2004-12-05
  • 打赏
  • 举报
回复
第N-m+i移到第一个
向后移,
第N-M+i+1移到第二个
向后移
...

修改为:
for(i=0;i<N;i++)
 scanf("%d,",&number[i]);
for(i=0;i<m;i++)
{
temp=number[N-m+i];
for(j=N-m+i;j>i;j--)
number[j]=number[j-1];
number[i]=temp;
}

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧