https://blog.csdn.net/richenyunqi/article/details/79642950
该博主源代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[20];//每排剩余座位数
for(int i=0;i<20;++i)
a[i]=5;//初始化为5
int N;
scanf("%d",&N);
while(N--){
int k;
scanf("%d",&k);//读取需要几张车票
int i=0;
while(i<20&&a[i]<k)//查找是否有剩余座位数多于k的排
++i;
if(i<20){//有,从该排起始编号开始输出k个连续递增数字
int start=i*5+6-a[i];
for(int j=0;j<k;++j)
printf("%d ",start+j);
printf("\n");
a[i]-=k;
}else{//没有,从有剩余座位的排中输出空闲座位直至输出空余座位总数为k
for(int j=0;j<20&&k>0;++j)
if(a[j]>0){
int start=j*5+6-a[j];
for(int m=0;m<min(a[j],k);++m)
printf("%d ",start+m);
k-=a[j];
a[j]=k>a[j]?0:a[j]-k;
}
printf("\n");
}
}
return 0;
}
我运行此代码一个结果如下:
我的输入:
4 4 2 4 4
4 4 4 4 4
5 5 5 5 5
5 5 5 5 5
4 4
最后一个4输入之后,输出理应是15 20 25 30 35才对!!!
原因:
我个人认为 k-=a[j];
a[j]=k>a[j]?0:a[j]-k;
这两句不太对,k-=a[j];可能会使得k为负数,从而导致a[j]-k这个数值更大了!!!