码迷,mamicode.com
首页 > 其他好文 > 详细

火车购票问题(16年ccf)

时间:2017-09-03 12:14:46      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:ext   cout   alt   names   bre   done   http   分配   编号   

火车购票问题(16年ccf)

问题描述
  请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。
  假设一节车厢有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。

 

 1 #include<iostream>
 2 using namespace std;
 3 int arr[20][5];
 4 
 5 void FenPei(int a)
 6 {
 7     int count=0,Done = 0;
 8     for(int y=1;y<=20;y++)
 9     {
10         for(int x=1;x<=5;x++)
11         {
12             if(arr[y][x]==0&&count<a) count++;//数一排中连续空座的数目 
13         }
14         if(count==a)//表示当前排有空座 ,分配空座,并将结果进行打印 
15         {
16             int x=1;
17             while(arr[y][x]) x++;//定位到空座
18             //将空座置为1,打印输出座位号
19             while(count--)
20             {
21                 arr[y][x]=1;
22                 cout<<((y-1)*5+x);
23                 x++;
24                 if(count!=0) cout<<" ";
25                 else cout<<endl;
26              }
27              Done = 1;
28             break;
29         }
30         count=0;//在数下一排前将计数器置0 
31     }
32     if(Done==0){
33             //遍历完毕没有发现空座
34             for(int y=1;y<=20;y++)
35             {
36                 for(int x=1;x<=5;x++)
37                 {
38                     if(arr[y][x]==0)
39                         {
40                             if(a--)
41                             {
42                                 //将空座置为1,打印输出座位号
43                                 arr[y][x]=1;
44                                 cout<<((y-1)*5+x);
45                                 if(a!=0) cout<<" ";
46                                 else cout<<endl;
47                             }
48                         }
49                  } 
50              } 
51     }
52 
53 }
54 int main()
55 {
56     int n=0,GouPiao[100];
57     //初始化座位,置为0 
58     for(int y=0;y<=20;y++)
59     {
60         for(int x=0;x<=5;x++)
61             arr[y][x] = 0;
62      } 
63      
64     cin>>n;
65     for(int i=0;i<n;i++)
66     {
67         cin>>GouPiao[i];
68     }
69     for(int i=0;i<n;i++)
70     {
71         FenPei(GouPiao[i]);
72     }
73     return 0;
74 }

技术分享

 

火车购票问题(16年ccf)

标签:ext   cout   alt   names   bre   done   http   分配   编号   

原文地址:http://www.cnblogs.com/yxh-amysear/p/7469032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!