PTA上的买火车票问题,总是通不过

@(—-—)@ 2019-07-18 03:17:54
问题如下:
某列车有青岛、济南、天津、北京四站(青岛发往北京),有10个座位,则:
(1)订购青岛-天津车票1张,应先显示有余票10张,并执行购票操作;
(2)再订天津-北京车票1张,显示余票10张,并执行购票操作;
(3)再订济南-天津车票9张,显示余票9张,并执行购票操作;
(4)再订青岛-天津车票1张,显示余票0张,并提示不能购票。
为简化,售出的车票是不固定座位的,仅保证“有座位可以坐”。例如:一列仅有2个座位的青岛-济南-北京的列车,
乘客A先订1张青岛-济南车票,可能占据0号座位;
乘客B再订1张济南-北京车票,可能占据1号座位(尽管有一个好像更优化的方案是让B占据0号座位,但此题不需要考虑);
乘客C再订1张青岛-北京的车票,看上去没有青岛-北京的空座位(没有票了),但是他可以在两段行程分别坐在0号和1号座位,所以依然可以成功购票。
输入格式:
第一行输入站点数量N(N>1 且 N<=50)和座位数量S(正整数S<=200),中间空一格。
第二行输入N个站点名称(名称仅由字母和数字组成,长度不超过30),以空格分隔,车站按照列车运行方向从起点至终点依次排列。
第三行输入订单数量m (正整数m<=50)
接下来m行,每行是一个订单,内容依次是 上车车站名 下车车站名 订票数量,中间以空格分隔。
输出格式:
对于每个订单,在一行内给出订票结果:先显示该行程的余票,然后打印“YES”或“NO”表示购票成功或购票失败。
输入样例:
4 10
Qingdao Jinan Tianjin Beijing
4
Qingdao Tianjin 1
Tianjin Beijing 1
Jinan Tianjin 9
Qingdao Tianjin 1

输出样例:
10 YES
10 YES
9 YES
0 NO




我的代码是:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
int N,S,m,i,j,k,q;
scanf("%d %d",&N,&S);
char *name[N];
int ticket[N-1];
for(i=0;i<N-1;i++){//车票区间等于站台数-1
ticket[i]=S;
}
for(i=0;i<N;i++){
name[i]=(char *)malloc(30*sizeof(char));
scanf("%s",name[i]);
}
scanf("%d",&m);
int need_ticket[m];
char *on[m],*off[m];
int int_on[m],int_off[m];
for(i=0;i<m;i++){
on[i]=(char *)malloc(30*sizeof(char));
off[i]=(char *)malloc(30*sizeof(char));
scanf("%s %s %d",on[i],off[i],&need_ticket[i]);
}
for(i=0;i<m;i++){//订单循环
for(j=0;j<N;j++){//起始站下标匹配循环
if(strcmp(on[i],name[j])==0){
int_on[i]=j;
}
if(strcmp(off[i],name[j])==0){
int_off[i]=j;
}
}
}
for(j=0;j<m;j++){
i=int_on[j];
int min=ticket[int_on[j]];
for(q=i;q<int_off[j]-1;q++){
if(ticket[i]>ticket[i+1])
min=ticket[i+1];
}
printf("%d ",min);
while(i<int_off[j]){
if(ticket[i]<need_ticket[j]){
printf("No\n");
i=int_off[j];
}
i++;
if(i==int_off[j]){
printf("Yes\n");
for(k=int_on[j];k<int_off[j];k++) {
ticket[k]-=need_ticket[j];
}
}
}
}
return 0;
}
...全文
334 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
@(—-—)@ 2019-07-18
  • 打赏
  • 举报
回复
因为刚刚开始用,大的效果还不是很清楚。就目前而言在上面练习会让自己更注意细节和算法的优化吧(因为会运行限制时间和内存)
轻箬笠 2019-07-18
  • 打赏
  • 举报
回复
类似pta这样的网站,刷题之后,效果如何啊?
@(—-—)@ 2019-07-18
  • 打赏
  • 举报
回复
已经解决了,居然就因为大小写!!!

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧