提高火车车座利用率(一)初步思路
提高火车车座利用率(-)
现实场景:
L君乘火车从A地赶往B,在车上发现有很多空位。而在他买票时,售票员明确告诉他只有站票。L君暗骂一声:破售票系统,有座位没坐票。
文章来源:
L君是一个程序员,写2两年没人用的代码,没有获得成就感,于是动了下念头,想解决上面的问题。
如果解决上面的问题:
个人:获得成就感,而且买到坐票的几率增加
吹牛:提高客运量,毕竟火车的座位与站票有限制,哈哈
解决思路:
数据结构:选择二维数组,可以很好的映射火车站点与座位。二维数组,以站点为列,以座位为行。座位闲置:0,座位占用:1。二维数组初始值为0
假设火车经过4站,有6张座位。
int[,] seatArray = new int[6, 4];
购票算法:遍历数组所有行,如果站点对应的列之间皆为0,有座!
|
|
站1 |
站2 |
站3 |
站4 |
|
座1 |
0 |
1 |
1 |
0 |
|
座2 |
1 |
1 |
0 |
0 |
|
座3 |
1 |
1 |
1 |
1 |
|
座4 |
0 |
0 |
0 |
0 |
|
座5 |
0 |
0 |
0 |
0 |
|
座6 |
0 |
0 |
0 |
0 |
/// <summary>
/// 检座
/// </summary>
/// <param name="Start">登车站-标示</param>
/// <param name="End">下车站-标示</param>
/// <returns></returns>
public List<int> CheckSeats(int Start, int End)
{
//存放座号
List<int> temp = new List<int>();
//检测每一行数据的Start ~ End列
for (int row = 0; row <= this.seats - 1; row++)
{
bool flag = true;
for (int column = Start; column <= End-1; column++)
{
if (seatArray[row,column] == 1)
{
flag = false;
break;
}
}
if (flag)
{
temp.Add(row);
}
}
return temp;
}
/// 检座
/// </summary>
/// <param name="Start">登车站-标示</param>
/// <param name="End">下车站-标示</param>
/// <returns></returns>
public List<int> CheckSeats(int Start, int End)
{
//存放座号
List<int> temp = new List<int>();
//检测每一行数据的Start ~ End列
for (int row = 0; row <= this.seats - 1; row++)
{
bool flag = true;
for (int column = Start; column <= End-1; column++)
{
if (seatArray[row,column] == 1)
{
flag = false;
break;
}
}
if (flag)
{
temp.Add(row);
}
}
return temp;
}
如上图所示,假设L君,从站点3~站4,则候选车票有4张:座2,4,5,6
下一章描述,计划经济下,每一个站点限量供应车票,怎么提高利用率
浙公网安备 33010602011771号