公共钥匙盒

“一个bug改一天”果然不是虚言

变量的作用域是时刻值得关注的

同时思考问题的”过程法“确实是可以推广到各个领域的 不仅是代码 也可以在生活中

#include<iostream>
using namespace std;

struct deal{
	int key_num;
	int borrow_time;
	int return_time;
	int use_time;
	deal(){
		key_num = 0;
		borrow_time = 0;
		return_time = 0;
		use_time = 0; 
	} 
};

int main(){
    int total = 0,times = 0;//total代表钥匙总量,times代表借用的次数
    cin>>total>>times;
	int *key = new int [total+1];//代表下标所对应的钥匙编号
	//数据的输入处理 
	for(int j=1; j<=total; j++) key[j] = j;
	deal *carry = new deal [times+1];
	for(int i=1; i<=times; i++){
		cin>>carry[i].key_num>>carry[i].borrow_time>>carry[i].use_time;
		carry[i].return_time = carry[i].borrow_time+carry[i].use_time; 
	}
	//数据的处理部分 
	int start_time = carry[1].borrow_time,end_time = carry[1].return_time;//准备判断每一秒的公共钥匙盒的情况 所以得找出开始的时间与结束的时间 
    for(int i=1; i<=times; i++){
    	if(carry[i].borrow_time<start_time)  start_time = carry[i].borrow_time;
    	if(carry[i].return_time>end_time)    end_time = carry[i].return_time;
	}
	for(int i=1; i<=times; i++){
		for(int j=i+1; j<=times; j++){
			if(carry[i].return_time==carry[j].return_time&&carry[i].key_num>carry[j].key_num){//同时还 钥匙编号按从小到大的顺序排列 
				deal temp = carry[i];//注意作用域啊 
				carry[i] = carry[j];
				carry[j] = temp;
			}
			if(carry[i].borrow_time>carry[j].borrow_time&&carry[i].return_time>carry[j].return_time){
				deal temp = carry[i];
				carry[i] = carry[j];
				carry[j] = temp;
			}
		}
	}
	for(int i=start_time; i<=end_time; i++){
		for(int j=1; j<=times; j++){
			if(carry[j].borrow_time==i){
				for(int k=1; k<=total; k++){
					if(key[k]==carry[j].key_num){ //一个小小的括号就是错误的来源 一个bug一小时 再次提醒break使用时应当要当心 
					    key[k]=0;
					    break;
				    }
				}
			}
			if(carry[j].return_time==i){
				for(int k=1; k<=total; k++){
					if(key[k]==0){
						key[k] = carry[j].key_num;
						break;
					}
				}
			}
		}
	}
    for(int j=1; j<=total; j++)//数据的输出  
		cout<<key[j]<<" ";
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值