ccf 201709-2 公共钥匙盒

本文分享了一段仅60行的C++代码,用于解决教室钥匙的借用和归还调度问题。通过使用vector和结构体,代码实现了教师在特定时间段内对钥匙的借用和归还操作,确保了钥匙的有效管理和分配。文章还提到了调试过程中遇到的两个常见错误及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不到60行,算是看到的里面最短的了 

#include<iostream>
#include<vector>
#include<algorithm> 
using namespace std;
struct teacher{
	int key;
	int start;
	int end;
};
int main(){
  int n,k;cin>>n>>k;
  int arr[n];
  for(int i=0;i<n;i++)arr[i]=i+1;
  teacher te[k];
  int max=0;
  for(int i=0;i<k;i++){//存入教师信息 
  	cin>>te[i].key>>te[i].start>>te[i].end;
  	te[i].end=te[i].start+te[i].end;
  	if(te[i].end>max)max=te[i].end; 
  }
  for(int i=1;i<max+1;i++){//当前时刻 
    vector<int> jie;
    vector<int> huan;
    for(int j=0;j<k;j++){//创建借还vector 
  	  if(te[j].start==i)jie.push_back(te[j].key);//存此时要借的key 
  	  if(te[j].end==i)huan.push_back(te[j].key);//存此时要还的key 
    }
   if(huan.size()!=0){//还完再借 
   sort(huan.begin(),huan.end());//按顺序还 
		for(int t=0;t<huan.size();t++){//遍历还的vector 
			for(int m=0;m<n;m++){//遍历arr找空 
			  if(arr[m]==0){
			    arr[m]=huan[t];//huan[t]是要还的key对应arr第一个空 
			    break;//跳出内层循环 
				}	
			} 
		} 
	} 	
    if(jie.size()!=0){//多个人借 
	  for(int t=0;t<jie.size();t++)//从小到大遍历借vector 
	  {	
	  	for(int m=0;m<n;m++){//每一个jie的元素,和借一个钥匙的过程一样 
	      if(arr[m]==jie[t])//要先找到钥匙的位置 	
	  	    {
	          arr[m]=0;break;	  	
			  }
	    }
	  }	
	}
  }
  cout<<arr[0];//输出结果 
  for(int i=1;i<n;i++){
  	cout<<" "<<arr[i]; 
  } 
  return 0;
  }


  
  
  被坑了一个小时差不多,发现两处错误

  程序一直跳不出来,调试打印发现是死循环
  1.检查发现多层循环有一个t++顺手写了个i++, 改完只有40分 
  2.第二处是还的时候从小到大还,借的时候肯定没有顺序,写成借的时候从小到大了。。。。 
  在纸上写测试例的时候想到的
 一定要先把思路理清,再写,刚开始自己做的笔记是对的,所以写完要认真对应检查 
  没想好不要写

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值