zoukankan      html  css  js  c++  java
  • CCF 2016-09-2 火车购票

    CCF 2016-09-2 火车购票

    题目

    问题描述

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

    思路

    设置数组大一格,存放其中的空位,找到合适的行,然后在其中输出结果即可。

    其实我的代码有问题,那格应该增加一个判断,判断连续空格的,但是,我不想写了,数据难度小,就这样了,以上。

    代码

    #include<iostream>
    #include<cmath> 
    using namespace std;
    
    
    int a[21][7];
    int main()
    {
    	int n,buy[101];
    	for(int i=0;i<20;i++)
    	{
    		for(int j=0;j<5;j++)
    		{
    			a[i][j]=0;
    		}
    		a[i][5]=5;
    		//应该放连续空格数的 
    	}
    	
    	cin>>n;
    	for(int i=0;i<n;i++)
    		cin>>buy[i];
    		
    	for(int tip=0;tip<n;tip++)
    	{
    		int order=buy[tip];
    		int line=0;
    		int pos=-1;
    		while(line!=20)
    		{
    			if(a[line][5]>=order)
    			{
    				pos=line;
    				break;
    			}
    			line++;
    		}
    		
    		if(pos==-1)
    		{
    			for(int i=0;i<20;i++)
    			{
    				for(int j=0;j<5;j++)
    				{
    					if(a[i][j]==0&&order>0)
    					{
    						a[i][j]=1;
    						a[i][5]--;
    						order--;
    						cout<<5*i+j+1<<" ";
    					}
    				}
    			}
    		}
    		else
    		{
    			int num=0;
    			int t=0;
    			a[pos][5]-=order;
    			for(int i=0;i<5;i++)
    			{
    				if(a[pos][i]==0)
    				{
    					num++;
    					if(num==order)
    					{
    						t=i;
    						break;
    					}
    				}
    				else
    				{
    					num=0;
    				}
    			}
    			t=t-order+1;
    			for(int i=0;i<order;i++)
    			{
    				a[pos][t+i]=1;
    				cout<<5*pos+t+i+1<<" ";
    			}
    		}
    		cout<<endl;
    	}
    /*	for(int i=0;i<20;i++)
    	{
    		for(int j=0;j<6;j++)
    		{
    			cout<<a[i][j];
    		}
    		cout<<endl;
    	}*/
    	return 0;
    }
    
  • 相关阅读:
    xml传数据
    简单实用的GroupBox控件
    漂亮的NavMenu导航控件
    使用设计模式构建通用数据库访问类
    Windows路由表详解
    zz Linux Shell常用技巧(目录)
    Ubuntu Linux 环境变量PATH设置
    zz eclipse.ini内存设置
    find 用法
    zz【java规范】Java spi机制浅谈
  • 原文地址:https://www.cnblogs.com/blogxjc/p/11422452.html
Copyright © 2011-2022 走看看