题目描述
代码
提交90分代码
超时,有可能是输出时for循环或者while循环耗时,但修改后答案错误,暂未找到问题
#include<stdio.h>
int main()
{
//输入购票信息
int n;
scanf("%d",&n);
int purchase[n];
int i,j,k;
for(i=0;i<n;i++)
{
scanf("%d",&purchase[i]);
}
int curTickets[20];//记录当前每一排余票数量
for(i=0;i<20;i++)
{
curTickets[i]=5;
}
int tickets[n][5];//记录每个人买到的票信息
for(i=0;i<n;i++)
{
for(j=0;j<5;j++)
tickets[i][j]=0;
}
//模拟买票
for(i=0;i<n;i++)
{
int count;//当前要买几张票
count = purchase[i];
//买的票在同一排
for(j=0;j<20;j++)
{
if(count <= curTickets[j])
{
for(k=0;k<count;k++)
{
tickets[i][k] = 5*j+k+1+5-curTickets[j];
}
curTickets[j]-=count;
count=0;
break;
}
}
//需要好几排的票
int cur=0;//当前位子
while(count != 0)
{
for(j=0;j<20;j++)
{
if(curTickets[j] == 0)
break;
//本排剩余数不足欲购票数
if((count-curTickets[j])>0)
{
for(k=0;k<curTickets[j];k++)
{
tickets[i][cur]=5*j+k+1;
cur++;
}
count -= curTickets[j];
curTickets[j]=0;
break;
}
else
{
for(k=0;k<count;k++)
{
tickets[i][cur]=5*j+k+1;
}
curTickets[j]-=count;
count=0;
cur=0;
break;
}
}
}
}
for(i=0;i<n;i++)
{
/*
j=0;
//数组越界
while(tickets[i][j+1] != 0)
{
printf("%d ",tickets[i][j]);
j++;
}
printf("%d",tickets[i][j]);
printf("\n");*/
for(j=0;j<5 && tickets[i][j]!=0;j++)
{
printf("%d ",tickets[i][j]);
}
printf("\n");
}
return 0;
}
修改后满分代码
#include<stdio.h>
int main()
{
//输入购票信息
int n;
scanf("%d",&n);
int purchase[n];
int i,j,k;
for(i=0;i<n;i++)
{
scanf("%d",&purchase[i]);
}
int curTickets[20];//记录当前每一排余票数量
for(i=0;i<20;i++)
{
curTickets[i]=5;
}
int tickets[n][5];//记录每个人买到的票信息
for(i=0;i<n;i++)
{
for(j=0;j<5;j++)
tickets[i][j]=0;
}
int cur=0;//当前位子
//模拟买票
for(i=0;i<n;i++)
{
int count;//当前要买几张票
count = purchase[i];
cur=0;
//买的票在同一排
for(j=0;j<20;j++)
{
if(count <= curTickets[j])
{
for(k=0;k<count;k++)
{
tickets[i][k] = 5*j+k+1+5-curTickets[j];
printf("%d ",tickets[i][k]);
}
curTickets[j]-=count;
count=0;
break;
}
}
//需要好几排的票
if(count != 0)
{
for(j=0;j<20;j++)
{
//有空位就安排上
if(curTickets[j]!=0)
{
if(count>curTickets[j])
{
for(k=0;k<curTickets[j];k++)
{
tickets[i][cur]=5*j+k+6-curTickets[j];
printf("%d ",tickets[i][cur]);
cur++;
}
count-=curTickets[j];
curTickets[j]=0;
}
else
{
for(k=0;k<count;k++)
{
tickets[i][cur]=5*j+k+6-curTickets[j];
printf("%d ",tickets[i][cur]);
cur++;
}
curTickets[j]-=count;
break;
}
}
}
}
printf("\n");
}
//for(i=0;i<n;i++)
//{
/*
j=0;
//数组越界
while(tickets[i][j+1] != 0)
{
printf("%d ",tickets[i][j]);
j++;
}
printf("%d",tickets[i][j]);
printf("\n");*/
/*for(j=0;j<5;j++)
{
if(tickets[i][j]==0)
break;
printf("%d ",tickets[i][j]);
}
printf("\n");
}*/
return 0;
}