简易火车票售票系统
发布时间
阅读量:
阅读量

#include <iostream>
#include <string>
using namespace std;
#define maxsize 100
int n;//全局站点总数
int max=0,min=0;
int ship[maxsize][maxsize]={0};//全局票数矩阵
int maxnum(int a[])
{
int i=0;
int max=0;
for(i=0;i<n;i++)
{
if(a[i]>max) max = a[i];
}
return max;
}
int minnum(int a[])
{
int i=0;
int min=a[0];
for(i=0;i<n;i++)
{
if(a[i]<min) min= a[i];
}
return min;
}
int strtonum(string s)
{
int i=0;
int len=s.length();
int n=1;
int sum=0;
for(i=len-1;i>=0;i--)
{
sum=sum+(s[i]-'0')*n;
n=n*10;
}
return sum;
}
void Find(string s)
{
int ticks=0;
int i=0;
int len=s.length();
int pos[2]={0};
int j=0;
for(i=0;i<len;i++)
{
if(s[i]==' ')
{
pos[j]=i;
j++;
}
if(j==2) break;
}
int start=strtonum(s.substr(pos[0]+1,pos[1]-pos[0]-1));
int end=strtonum(s.substr(pos[1]+1,len-pos[1]-1));
for(i=0;i<=max-min;i++)
{
for(j=0;j<=max-min;j++)
{
if(i<=(start-min) && j>=(end-min))
{
ticks=ticks+ship[i][j];
}
}
}
cout<<ticks<<endl;
}
void sell(string s)
{
int i=0;
int flag=0;//票是否卖成功
int len=s.length();
int pos[2]={0};
int j=0;
for(i=0;i<len;i++)
{
if(s[i]==' ')
{
pos[j]=i;
j++;
}
if(j==2) break;
}
int start=strtonum(s.substr(pos[0]+1,pos[1]-pos[0]-1));
int end=strtonum(s.substr(pos[1]+1,len-pos[1]-1));
if(ship[start-min][end-min]>0)
{
ship[start-min][end-min]=ship[start-min][end-min]-1;
flag=1;//直接就有这么目的地的票,卖出去,买成功
}
else
{
for(i=0;i<=max-min;i++)
{
for(j=0;j<=max-min;j++)
{
if(i<=(start-min) && j>=(end-min))//没有直接目的地的票,但有可以拆分的票
{
if(ship[i][j]>1)
{
ship[i][j]=ship[i][j]-1;
flag=1;
if(start-min>i)
{
ship[i][start-min]=ship[i][start-min]+1;//拆分后剩下的那部票
}
if(j>end-min)
{
ship[end-min][j]=ship[end-min][j]+1;
}
}
}
}
}
}
if(flag==0) cout<<"没有"<<start<<"到"<<end<<"的票"<<endl;
}
void display()
{
int i=0,j=0;
for(i=0;i<=max-min;i++)
{
for(j=0;j<=max-min;j++)
{
cout<<ship[i][j]<<" ";
}
cout<<endl;
}
}
int main()
{
cin>>n;//站点总数
int num[maxsize];
int i=0,j=0;
for(i=0;i<n;i++)
{
cin>>num[i];
}
int ticketcount=0;
cin>>ticketcount;//票数
max=maxnum(num);
min=minnum(num);
ship[0][max-min]=ticketcount;
string command[maxsize];
getchar();
i=0;
getline(cin,command[i]);
while(command[i]!="")
{
i++;
getline(cin,command[i]);
}
int mannum=i;
for(i=0;i<mannum;i++)
{
if(command[i][0]=='F')
{
Find(command[i]);
}
else if(command[i][0]=='S')
{
sell(command[i]);
}
else
{
cout<<command[i]<<"这个命令无效!"<<endl;
}
}
//display();
return 0;
}
代码解释
代码:
全部评论 (0)
还没有任何评论哟~
