赞
踩
某个打印机根据打印队列执行打印任务。打印任务分为九个优先级,分别采用数字1~9表示,数字越大优先级越高。打印机每次从队列头部取出第一个任务A,然后检查队列余下任务中有没有比A优先级更高的任务,如果有比A优先级高的任务,则将任务A放到队列尾部,否则执行任务A的打印。请编写一个程序,根据输入的打印队列,输出实际打印顺序。
1、输入:’8,9,10‘
输出:’2,1,0‘
2、输入:’5,7,6,4‘
输出:‘1,2,0,3’
3、输入:‘8,7,8,6’
输出:‘0,2,1,3’
1、创建一个数组,从大到小排序,根据这个排序好的数组遍历,找到当前最大的元素的下标,把下标push到要输出的数组中来。
2、再创建一个数组,保存每次找到一个元素后要重新排列一次数组。防止输出为:‘8,7,8,7’,这种重复元素的情况。(按这个输入,最后输出应该为‘0,2,3,1’),因为下标为1的’7‘,因为不够下标为2的‘8’大,所以会被放到数组最后面。所以每次输出一个元素后要保存当前数组。
<script> const str='1,3,2,4' function printPrinter(str) { if(str.length<=1){return 0} let arr = str.split(","); //最初数组 let arr2 = [...arr] //排序后的数组 let arr3 = [...arr] //当前数组 let index = [] //当前数组下标 let indexArr = [] //输出数组 let d1 = null //交换中介 for(let i=0;i<arr2.length;i++){ index.push(i) }//给下标数组赋值 arr2.sort((a,b)=>{return b-a}) //对arr2逆序排序 console.log(arr2,arr3,index,indexArr) for(let i=0;i<arr2.length;i++){//遍历排序后等数组 console.log(arr3) while(arr2[i] !== arr3[0]){//如果当前数组的头部大小不等于排序后数组等arr2[i],把当前数组和下标放到数组的最后面。 d1 = arr3[0] arr3.shift() arr3.push(d1) d1 = index[0] index.shift() index.push(d1) } //如果相等的话把下标放到输出结果的数组中,然后在当前数组和当前数组下标中把头丢出去。 indexArr.push(index[0]) arr3.shift() index.shift() } return indexArr.join() } console.log(printPrinter(str)) </script>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。