本文主要是介绍CCF 201609-2 火车售票 求指教,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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;//初始化为5int 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{//没有,从有剩余座位的排中输出空闲座位直至输出空余座位总数为kfor(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这个数值更大了!!!
这篇关于CCF 201609-2 火车售票 求指教的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!