题目描述
要求输入一个柱面访问请求序列以及当前磁头所在柱面号和移动方向,输出采用电梯调度算法时移动臂响应的柱面访问序列。
输入格式
程序要求输入3行,以回车符号作为分隔,第一行是2个整型数n,m,之间用空格隔开,n表示当前磁头所在的柱面号,m表示第二行输入m个数;第二行是m个整数,数之间以空格作为分隔,表示柱面访问请求序列;第三行是数字-1或1,当为-1时表示移动臂向柱面号减小方向移动,当为1时表示移动臂向柱面号增大方向移动。
输出格式
输出m个整数,数之间以空格作为分隔,采用电梯调度算法时移动臂响应的柱面访问序列。
输入样例 复制
15 10 24 38 2 110 43 36 5 11 6 180 -1
输出样例 复制
11 6 5 2 24 36 38 43 110 180
# include <stdio.h>
# include <stdlib.h>
void Sort(int a[],int n);
void main(){
int *a;
int n,m; //m表示当前磁头所在柱面号,n表示柱面访问请求序列
int move=0;
int i;
int dw; //定位到当前磁头所在柱面的位置
scanf("%d %d",&m,&n);
a=(int *)malloc((n+1)*sizeof(int));
i=0;while(i<n){
scanf("%d",&a[i]);
i++;
}
a[n]=m; //将当前磁头所在的柱面号添加进访问请求序列
scanf("%d",&move);
Sort(a,n+1);
i=0;
while(i<n+1){
if(a[i]==m){
dw=i;
}
i++;
}
if(move==-1){
i=dw-1;
do{
printf("%d ",a[i]);
i--;
}while(i>=0);
i=dw+1;while(i<=n){
printf("%d ",a[i]);
i++;
}
}else{
for(i=dw+1;i<=n;i++){
printf("%d ",a[i]);
}
i=dw-1;
while(i>=0){
printf("%d ",a[i]);
i--;
}
}
free(a);
}
void Sort(int a[],int n){
int i=0,j,temp,min;
while(i<n-1)
{
min=i;
for(j=i+1;j<n;j++)
while(a[j]<a[min])
min=j;
if(min!=i)
{
temp=a[min];
a[min]=a[i];
a[i]=temp;
}
i++;
}
}