ccf/公共钥匙盒

package _02;


import java.util.Arrays;
import java.util.Scanner;


public class test {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();// 钥匙数量
int k = in.nextInt();// 老师借钥匙数量


int[] key = new int[n];// 钥匙列表
int[][] teacher = new int[k][4];// 老师信息表,第四个元素为归还钥匙时间


// 初始化钥匙
for (int i = 0; i < n; i++) {
key[i] = i + 1;
}
// 接收输入信息初始化老师信息表并计算钥匙归还时间
for (int i = 0; i < k; i++) {
teacher[i][0] = in.nextInt();
teacher[i][1] = in.nextInt();
teacher[i][2] = in.nextInt();
teacher[i][3] = teacher[i][1] + teacher[i][2];
}
int time = 1, max = 0;// time是计时器,max是最大归还时间
// 找出最大归还时间max
for (int i = 0; i < k; i++) {
if (teacher[i][3] > max)
max = teacher[i][3];
}
// 钥匙归还序列
int[] ret = new int[k];
// 当小于最大归还时间进入循环
while (time <= max) {
// 初始化钥匙归还序列
for (int i = 0; i < k; i++) {
ret[i] = 0;
}
// 作为归还序列的起始位置
int m = 0;
// 遍历老师信息表找出某时刻需归还的钥匙,构造归还序列,ret中存储的是钥匙号
for (int i = 0; i < k; i++) {
if (teacher[i][3] == time) {
ret[m++] = teacher[i][0]; // 将该时间需要归还的钥匙序号放在归还序列中
}
}
// 将归还序列从小到大排序
Arrays.sort(ret);
// 进行归还
for (int i = 0; i < k; i++) {
if (ret[i] != 0) {// 如果该时间需要还的钥匙队列中的值不为0,则进行还钥匙操作。
for (int j = 0; j < n; j++) {
if (key[j] == 0) {// 从左到右,如果该钥匙位置为空,则归还
key[j] = ret[i];
ret[i] = 0;// 将其从归还序列中清除
break;
}
}
}
}
// 再次遍历老师信息表,借钥匙
for (int i = 0; i < k; i++) {
if (teacher[i][1] == time) {
for (int j = 0; j < n; j++) {
if (key[j] == teacher[i][0]) {
key[j] = 0;// 钥匙可借则借走
}
}
}
}
time++;


}

for (int i = 0; i < n; i++)
System.out.print(key[i] + " ");
}

}

参照http://m.blog.csdn.net/zhangcheng_95/article/details/78252900

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值