测试用例二

#include<math.h>

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

struct train {

int * aStationIds;//动态建立途径站数组

int * bol;//动态建立可用区间表

}*piao;//动态建立票仓表

int i,j;//循环变量

int n,m;//车票数量,途径站数量

void SetOneTrainLine(unsigned int StationNum ,const unsigned int* pStationIds ,unsigned int SeatCount) {//建立票数据函数

piao=(struct train *)malloc(sizeof(struct train)*SeatCount);//建立票结构体

n=SeatCount,m=StationNum;//记录车票数量,途径站数量

for(i=0; i<SeatCount; i++) {//为每个车票设置属性

piao[i].aStationIds=(int *)malloc(sizeof(int)*StationNum);//为第i张车票开拓途径站数组空间

for(j=0; j<StationNum; j++)

{//循环赋值途径站

piao[i].aStationIds[j]=pStationIds[j];

 

}

 

piao[i].bol=        (int *)malloc(sizeof(int)*StationNum);//为第i张车票开拓可用区间数组空间

for(j=0; j<StationNum; j++) 

{//循环初始化赋值

piao[i].bol[j]=1;

 

}

}

}

int SeaTicket(unsigned int SrcStationId,unsigned int DestStationId) {//购票函数

int x,y;//记录起点和终点的位置

for(j=0; j<m; j++) {//循环查询起点位置

if(piao->aStationIds[j]==SrcStationId)x=j;

}

 

for(j=0; j<m; j++) {//循环查询终点位置

if(piao->aStationIds[j]==DestStationId)y=j;

}

 

for(i=0; i<n; i++) { //从头检测每张车票

int k=1;//假定该车票能满足条件

for(j=x; j<y; j++)

{ //循环证明此张车票满足要求

if(piao[i].bol[j]==0)k=0;//如果发现不满足则改变k值

}

if(k==1) { //如果k值没有被改变证明此票可以满足条件

for(j=x; j<y; j++)

{ //循环取走此段区间

piao[i].bol[j]=0;

 

}

return 0;//返回结果

 

}

}

return -1;//所有车票都无法满足条件则返回错误

}

unsigned int FindLeftTickets(unsigned int SrcstationId,unsigned int DestStationId) {

int ans=0,x,y;//记录满足条件的车票数量以及起点和终点的位置

for(j=0; j<m; j++)

{ //循环查询起点位置

if(piao->aStationIds[j]==SrcstationId)x=j;

 

}

 

for(j=0; j<m; j++)

{ //循环查询终点位置

if(piao->aStationIds[j]==DestStationId)y=j;

 

}

if(y<=x)return -1;

for(i=0; i<n; i++)

{ //从头检测每张车票

int k=1;//假定该车票能满足条件

for(j=x; j<y; j++)

{ //循环证明此张车票满足要求

if(piao[i].bol[j]==0)k=0;//如果发现不满足则改变k值

 

}

 

if(k==1) { //如果k值没有被改变证明此票可以满足条件

ans++;//满足条件的车票数加一

 

}

 

}

return ans;//返回满足条件的车票数

 

}

void TextCase01(void) {

 

unsigned int aStationIds[10]= {1,2,3,4,5,6,7,8,9,10};

SetOneTrainLine(sizeof(aStationIds)/sizeof(aStationIds[0]),aStationIds,10);

 

if(10==FindLeftTickets(1,10)) puts("检测点1通过");

 

if(0==SeaTicket(1,3))        puts("检测点2通过");

 

if(0==SeaTicket(2,4))        puts("检测点3通过");

 

if(0==SeaTicket(3,5))        puts("检测点4通过");

 

if(0==SeaTicket(4,6))        puts("检测点5通过");

 

if(0==SeaTicket(5,7))        puts("检测点6通过");

 

if(0==SeaTicket(6,8))        puts("检测点7通过");

 

if(9==FindLeftTickets(1,2)) puts("检测点8通过");

 

if(8==FindLeftTickets(2,4))  puts("检测点9通过");

 

if(-1==FindLeftTickets(4,3)) puts("检测点a通过");

 

if(8==FindLeftTickets(3,5))  puts("检测点b通过");

 

if(8==FindLeftTickets(4,5)) puts("检测点c通过");

 

if(8==FindLeftTickets(1,10))  puts("检测点d通过");

 

}

int main() {

 

TextCase01();

 

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值