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;//初始化为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这个数值更大了!!!

猜你喜欢

转载自blog.csdn.net/sunshine04/article/details/108929177
今日推荐