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这个数值更大了!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值