#include<iostream>
#include<iomanip>
using namespace std;
#define MAXN 10000
int main()
{
int track[MAXN],n,s,k;
cout<<"输入要访问的磁道数:";
cin>>n;
cout<<"输入要访问的磁道号:";
for(int i=0;i<n;i++) cin>>track[i];
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
{
if(track[i]>track[j])
{
int temp=track[i];
track[i]=track[j];
track[j]=temp;
}
}
for(int i=0;i<n;i++) cout<<track[i]<<" ";
cout<<endl;
cout<<"输入磁头的开始位置:";
cin>>s;
for(k=0;k<n;k++) if(track[k]==s) break;
cout<<endl<<endl;
cout<<"若磁头向外移动,则"<<endl;
cout<<"访问的磁道号:";
for(int i=k;i<n;i++) cout<<setw(3)<<track[i]<<" ";
for(int i=k-1;i>=0;i--) cout<<setw(3)<<track[i]<<" ";
cout<<endl;
cout<<"移动距离 : 0 ";
double sum=0;
for(int i=k+1;i<n;i++)
{
cout<<setw(3)<<track[i]-track[i-1]<<" ";
sum+=track[i]-track[i-1];
}
if(k!=0)
{
cout<<setw(3)<<track[n-1]-track[k-1]<<" ";
sum+=track[n-1]-track[k-1];
}
for(int i=k-2;i>=0;i--)
{
cout<<setw(3)<<track[i+1]-track[i]<<" ";
sum+=track[i+1]-track[i];
}
cout<<endl;
cout<<"平均访问寻道长度为:"<<sum/n<<endl;
cout<<endl<<endl;
cout<<"若磁头向里移动,则"<<endl;
cout<<"访问的磁道号:";
for(int i=k;i>=0;i--) cout<<setw(3)<<track[i]<<" ";
for(int i=k+1;i<n;i++) cout<<setw(3)<<track[i]<<" ";
cout<<endl;
cout<<"移动距离 : 0 ";
sum=0;
for(int i=k-1;i>=0;i--)
{
cout<<setw(3)<<track[i+1]-track[i]<<" ";
sum+=track[i+1]-track[i];
}
if(k!=n-1)
{
cout<<setw(3)<<track[k+1]-track[0]<<" ";
sum+=track[k+1]-track[0];
}
for(int i=k+2;i<n;i++)
{
cout<<setw(3)<<track[i]-track[i-1]<<" ";
sum+=track[i]-track[i-1];
}
cout<<endl;
cout<<"平均访问寻道长度为:"<<sum/n<<endl;
return 0;
}
/*
12 43 144 32 8 78 52 99 27 86
*/
#include<iomanip>
using namespace std;
#define MAXN 10000
int main()
{
int track[MAXN],n,s,k;
cout<<"输入要访问的磁道数:";
cin>>n;
cout<<"输入要访问的磁道号:";
for(int i=0;i<n;i++) cin>>track[i];
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
{
if(track[i]>track[j])
{
int temp=track[i];
track[i]=track[j];
track[j]=temp;
}
}
for(int i=0;i<n;i++) cout<<track[i]<<" ";
cout<<endl;
cout<<"输入磁头的开始位置:";
cin>>s;
for(k=0;k<n;k++) if(track[k]==s) break;
cout<<endl<<endl;
cout<<"若磁头向外移动,则"<<endl;
cout<<"访问的磁道号:";
for(int i=k;i<n;i++) cout<<setw(3)<<track[i]<<" ";
for(int i=k-1;i>=0;i--) cout<<setw(3)<<track[i]<<" ";
cout<<endl;
cout<<"移动距离 : 0 ";
double sum=0;
for(int i=k+1;i<n;i++)
{
cout<<setw(3)<<track[i]-track[i-1]<<" ";
sum+=track[i]-track[i-1];
}
if(k!=0)
{
cout<<setw(3)<<track[n-1]-track[k-1]<<" ";
sum+=track[n-1]-track[k-1];
}
for(int i=k-2;i>=0;i--)
{
cout<<setw(3)<<track[i+1]-track[i]<<" ";
sum+=track[i+1]-track[i];
}
cout<<endl;
cout<<"平均访问寻道长度为:"<<sum/n<<endl;
cout<<endl<<endl;
cout<<"若磁头向里移动,则"<<endl;
cout<<"访问的磁道号:";
for(int i=k;i>=0;i--) cout<<setw(3)<<track[i]<<" ";
for(int i=k+1;i<n;i++) cout<<setw(3)<<track[i]<<" ";
cout<<endl;
cout<<"移动距离 : 0 ";
sum=0;
for(int i=k-1;i>=0;i--)
{
cout<<setw(3)<<track[i+1]-track[i]<<" ";
sum+=track[i+1]-track[i];
}
if(k!=n-1)
{
cout<<setw(3)<<track[k+1]-track[0]<<" ";
sum+=track[k+1]-track[0];
}
for(int i=k+2;i<n;i++)
{
cout<<setw(3)<<track[i]-track[i-1]<<" ";
sum+=track[i]-track[i-1];
}
cout<<endl;
cout<<"平均访问寻道长度为:"<<sum/n<<endl;
return 0;
}
/*
12 43 144 32 8 78 52 99 27 86
*/