“一个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;
}