100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > CCF CSP 09-2 火车购票(90分 怎么也检查不出来问题在哪儿 导致不能满分??)

CCF CSP 09-2 火车购票(90分 怎么也检查不出来问题在哪儿 导致不能满分??)

时间:2022-10-05 22:13:12

相关推荐

CCF CSP 09-2 火车购票(90分 怎么也检查不出来问题在哪儿 导致不能满分??)

问题描述

试题编号: 09-2

试题名称: 火车购票

时间限制: 1.0s

内存限制: 256.0MB

问题描述:

问题描述

请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。

假设一节车厢有20排、每一排5个座位。为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10号,依次类推,第20排是96到100号。

购票时,一个人可能购一张或多张票,最多不超过5张。如果这几张票可以安排在同一排编号相邻的座位,则应该安排在编号最小的相邻座位。否则应该安排在编号最小的几个空座位中(不考虑是否相邻)。

假设初始时车票全部未被购买,现在给了一些购票指令,请你处理这些指令。

输入格式

输入的第一行包含一个整数n,表示购票指令的数量。

第二行包含n个整数,每个整数p在1到5之间,表示要购入的票数,相邻的两个数之间使用一个空格分隔。

输出格式

输出n行,每行对应一条指令的处理结果。

对于购票指令p,输出p张车票的编号,按从小到大排序。

样例输入

4

2 5 4 2

样例输出

1 2

6 7 8 9 10

11 12 13 14

3 4

样例说明

1) 购2张票,得到座位1、2。

2) 购5张票,得到座位6至10。

3) 购4张票,得到座位11至14。

4) 购2张票,得到座位3、4。

评测用例规模与约定

对于所有评测用例,1 ≤ n ≤ 100,所有购票数量之和不超过100。

C++代码如下:

#include<iostream>#include<algorithm>#include<cmath>using namespace std;const int N=105;struct seat{int ord; //属于第几条指令bool isD; //是否已分配,默认false} ;struct row{seat seats[6]; //下标从1-5int r; //这一排剩余的座位数量}rows[21]; //排数下标从1到20int main(){int a[N];//指令int n;cin>>n;for(int i=0;i<n;i++)cin>>a[i];if(n==1){for(int i=1;i<=a[0];i++)cout<<i<< ' ';cout<<endl;return 0;}for(int i=1;i<=20;i++){rows[i].r=5;for(int j=1;j<6;j++){rows[i].seats[j].ord=-1;rows[i].seats[j].isD=0;}}int ur=0,us=0; //初始时已经分配的排数为0,已经分配座位为0个for(int i=0;i<n;i++){if(ur<20){int flag=0;for(int j=1;j<=20;j++){if(rows[j].r>=a[i]){for(int k=1;k<=a[i];k++){rows[j].seats[5-rows[j].r+1].isD=1;rows[j].seats[5-rows[j].r+1].ord=i;rows[j].r--;}flag=1; break;}}if(!flag){for(int j=1;j<=a[i];j++){rows[ur+1].seats[j].isD=1;rows[ur+1].seats[j].ord=i;}rows[ur+1].r-=a[i];ur+=1; us+=a[i];}}else //20排上都有人坐了{int c=0; //记录已经给第i次购票分配的座位数目for(int j=1;j<=20;j++){if(rows[j].r>0){while(c<a[i]&&rows[j].r>0){rows[j].seats[5-rows[j].r+1].isD=1;rows[j].seats[5-rows[j].r+1].ord=i;rows[j].r--; c++;}}if(c==a[i]) break;}}}/*for(int j=1;j<=20;j++){ cout<<j<<" 排, ";for(int k=1;k<=5;k++){cout<<rows[j].seats[k].ord<<' ';}cout<<endl;} */ //调试时显示车厢分布图for(int i=0;i<n;i++){for(int j=1;j<=20;j++){for(int k=1;k<=5;k++){//cout<<j<<" 排, "<<rows[j].seats[k].ord<<' ';if(rows[j].seats[k].ord==i)cout<<(j-1 )*5+k<<" ";}}cout<<endl;}return 0;}

反思:要细心,要注意变量的初始化与后来数组下标对应时会不会产生歧义和矛盾

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
csp火车购票

csp火车购票

2024-08-30

csp 09-2 火车购票

csp 09-2 火车购票

2021-11-27

csp 09-2 火车购票

csp 09-2 火车购票

2024-09-04

CSP认证 09-2 火车购票

CSP认证 09-2 火车购票

2023-05-06