CCF201703-2 试题名称: 学生排队 C语言版
错误代码:
#include<stdio.h>
int main()
{
int n,m,i,x,y,k,j;
int stu[1000],temp;
scanf("%d",&n);
scanf("%d",&m);
for(i=1;i<=n;i++)//编号
{
stu[i]=i;
}
for(k=0;k<m;k++)
{
scanf("%d %d",&x,&y);
for(j=1;j<=n;j++)
{
if(stu[j]==x)//找到学号为x的学生
{
if(y>=0)
{
for(i=j;i<j+y;i++)
{
temp=stu[i];
stu[i]=stu[i+1];
stu[i+1]=temp;
}
break;
}
else
{
for(i=j;i>j+y;i–)
{
temp=stu[i];
stu[i]=stu[i-1];
stu[i-1]=temp;
}
break;
}
}
}
}
for(i=1;i<=n;i++)
{
printf("%d ",stu[i]);
}
return 0;
}
错误原因:
stu[1000]不满足题目中的范围要求,改为stu[1001]即可。
正确代码:
#include<stdio.h>
int main()
{
int n,m,i,x,y,k,j;
int stu[1001],temp;
scanf("%d",&n);
scanf("%d",&m);
for(i=1;i<=n;i++)//编号
{
stu[i]=i;
}
for(k=0;k<m;k++)
{
scanf("%d %d",&x,&y);
for(j=1;j<=n;j++)
{
if(stu[j]==x)//找到学号为x的学生
{
if(y>=0)
{
for(i=j;i<j+y;i++)
{
temp=stu[i];
stu[i]=stu[i+1];
stu[i+1]=temp;
}
break;
}
else
{
for(i=j;i>j+y;i–)
{
temp=stu[i];
stu[i]=stu[i-1];
stu[i-1]=temp;
}
break;
}
}
}
}
for(i=1;i<=n;i++)
{
printf("%d ",stu[i]);
}
return 0;
}