Printer Queue算法(华为: 打印任务排序, POJ3125)Golang实现

Kanya ·
更新时间:2024-11-11
· 984 次阅读

问题描述 Printer Queue(打印队列)POJ3125 打印机顺序打印问题 这是一道ACM算法题,上面的两个是求打印时间,还有一种是求打印顺序 输入和输出: 输入 3 1 0 5 4 2 1 2 3 4 6 0 1 1 9 1 1 1 输出 1 2 5 问题解析 输入解析 第一行的: 3 3个测试用例,每个测试用例包含两行,所以下面有6行,以最后一个用例为例解析 倒数第二行6 0 这是第3个用例的第一行 6: 这个测试用例有6个打印任务, 0: 你的任务在打印队列中的位置(0表示开头,就是排第一个) 倒数第一行的1 1 9 1 1 1 这是第3个用例的第二行, 表示打印队列中的6个任务(因为上一行的6 0中的6表明有6个任务)的优先级 你的任务根据上一行6 0中的0表明在0位置,优先级为1(1 1 9 1 1 1) 输出解析: 1 // 第1个测试用例,打印你的任务花了1分钟 2 // 第2个测试用例,打印你的任务花了2分钟 5 // 第3个测试用例,打印你的任务花了5分钟 注意 只有打印才计算时间. 比如: 上面的第3个测试用例.第一个被打印的是优先级为9的任务, 最开始他前面有2个优先级为1的任务,这2个任务会每次被移动到最后且不会打印,移动9前面的2个任务这个是不花时间的 Go代码实现打印时间 参考了Java实现 因为Go没有内置的queue,这里自己实现了一个Queue,实现的比较粗糙 package main import ( "errors" "fmt" ) type Queue struct { Element []int } func (q *Queue)Pop()(int,error){ if len(q.Element)>0{ result := q.Element[0] q.Element = q.Element[1:] return result,nil }else{ return -1,errors.New("no element to pop") } } func (q *Queue)Push(i int){ q.Element = append(q.Element,i) } func main(){ fmt.Println("程序开始了") var testCaseCount int // 测试用例的个数 var jobCount int // 每个测试用例的打印任务数量 var youJobPosition int // 每个测试用例的你的打印任务的位置 fmt.Scanf("%d", &testCaseCount) fmt.Println("用例个数: ", testCaseCount) for i:=0;i<testCaseCount;i++{ fmt.Scanf("%d", &jobCount) fmt.Scanf("%d", &youJobPosition) fmt.Printf("任务数量:%d, 你的打印任务的位置:%d \n", jobCount, youJobPosition) job :=Queue{} jobIndex := Queue{} for i:=0;ijob{ return false } } return true } 在Goland这个IDE上的效果 在这里插入图片描述 Go代码实现打印顺序 待完成 打印机顺序打印问题 作者:cumt_TTR



poj 华为 golang 排序

需要 登录 后方可回复, 如果你还没有账号请 注册新账号