CSP考试 2016年09月第2题 火车购票 C++实现

时间:2021-01-26 21:32:45

CSP考试 2016年09月第2题 火车购票 C++实现

#include <stdio.h>
#include <string.h>
//还是按考试时的想法来做 
int main()
{
	int num;
	scanf("%d",&num);
	int a[num];
	for(int i=0;i<num;i++)
	{
		scanf("%d",&a[i]);
	}
	int b[20];//座位 
	memset(b,0,sizeof(b));
	int jg[20][5];//存储结果 
	memset(jg,0,sizeof(jg));
	for(int i=0;i<num;i++) 
	{
		//printf("hello %d\n",i);
		int flag=0; 
		int t=a[i]; 
		for(int j=0;j<20;j++)//能不能分配到邻座
		{
			if((5-b[j])>=a[i])//如果能满足要求
			{
				flag=1;
				b[j]=a[i]+b[j];
				for(int k=0;k<5;k++)
				{
					if((t>0)&&(jg[j][k]==0))
					{
						t--;
						jg[j][k]=i+1; 
					}
				}
				break;		
			} 
			if(flag==1)
			{
				break;
			}
		}
		/*
		for(int m=0;m<20;m++)
		{
			printf("\n");
			for(int n=0;n<5;n++)
			{
				printf("%d ",jg[m][n]);
			}
		} 
		printf("\n");*/
		
		if(flag==0)//不能分配到邻座
		{
			int t=a[i];
			for(int m=0;m<20;m++)
			{
				for(int n=0;n<5;n++)
				{
					if((t>0)&&(jg[m][n]==0))
					{
						t--;
						jg[m][n]=i+1;
					}
					if(t==0)
					{
						break;
					}
				}
				if(t==0)
				{
					break;
				}
			}
		}
		/*
		for(int m=0;m<20;m++)
		{
			printf("\n");
			for(int n=0;n<5;n++)
			{
				printf("%d ",jg[m][n]);
			}
		}*/
		
	}
	/*
	for(int m=0;m<20;m++)
	{
		printf("\n");
		for(int n=0;n<5;n++)
		{
			printf("%d ",jg[m][n]);
		}
	}
	printf("\n");*/	

	for(int i=0;i<num;i++)//输出 
	{
		int t=a[i];
		for(int m=0;m<20;m++)
		{
			for(int n=0;n<5;n++)
			{
				if((t>0)&&(jg[m][n]==i+1))
				{
					t--;
					//printf("%d %d    ",m,n);
					printf("%d ",m*5+n+1);
				}
			}
		} 
		printf("\n");
	}
	
	
	/*
	for(int i=0;i<100;i++)
	{
		printf("%d ",jg[i]);
	}*/
	/*
	for(int i=0;i<20;i++)
	{
		printf("\n");
		for(int j=0;j<5;j++)
		{
			printf("%d ",b[i][j]);
		}
	}*/
	/*
	printf("%d\n",num);
	for(int i=0;i<num;i++)
	{
		printf("%d ",a[i]);
	}
	*/
	return 0;
} 
CSP考试 2016年09月第2题 火车购票 C++实现