testing
by Thyiad
HTML
<script src="https://unpkg.com/vue"></script>
<div id="app">
<h3>1. 编程:断开链条</h3>
<p>
测试数据:<input type="text" :value="arrTest1" readonly style="width:200px;">
<button @click="randomArrTest1">随机{{randomNum}}个数</button>
</p>
<p>
取出数量:<input type="text" v-model="takeNum" @keyup.enter="doTake" style="width:200px;">
<button @click="doTake">取出最优解</button>
</p>
<p>
最优解:{{test1Optimum}}
</p>
<h3>2. 编程: M个最大的数</h3>
<p>测试数据采用上面的</p>
<p>
取出数量:<input type="text" v-model="takeNum2" @keyup.enter="doTake2" style="width:200px;">
<button @click="doTake2">取出最大数</button>
</p>
<p>
最大数:{{test2Result.join()}}
</p>
<h3>3. 编程: 最大方形</h3>
<p>
测试数据:<textarea name="" cols="20" rows="7" :value="arr3Show" readonly></textarea>
<select name="" id="" @change="changeTest3Data">
<option value="0">第一个</option>
<option value="1">第二个</option>
<option value="2">第三个</option>
</select>
<button @click="takeMaxRect">取出最大方形</button>
</p>
<p>最大方形:{{maxRect}}</p>
<h3>4. 编程:顺时针环绕列印矩阵元素</h3>
<p>
测试数据:<textarea id="rectTest4" name="" cols="20" rows="7" :value="arr4Show"></textarea>
<button @click="takeClockwise">取出矩阵元素</button>
</p>
<p>矩阵元素:{{clockwise}}</p>
<h3>5.问答题,摔iphone</h3>
<p>这个其实就是二分算法吧,不断折中去尝试。(为什么强调2个iphone,感觉与题无关。。)假设是在顶层,那么就会有 [60, 90, 105, 112, 116, 118, 119] 共计7次的失败尝试,这个就不写了,其实就是一个递归,在限定的索引内不断尝试查找。没有上面的烧脑。。
</p>
<p>第一题,随着取出数量不相同,能组合的情况也存在很多种,但只要能把它们分解到最后一步,取出单个最小值就OK了。虽然解出来了,但个人并不是太满意,组合尝试的次数很多,暂时也没有想到优化的办法。</p>
<p>第二题,不知道是不是我理解错误,只是倒序取一个数组的值吗。。</p>
<p>第三题,路线其实就是限定了右、下两种,目标点很确定,所以优先判断一下起点和终点是否能容纳矩形,然后在路途中每走一步都判断一下是否能容纳矩形,不行就回退到上一步</p>
<p>第四题,主要是长宽比不确定,一开始没注意,自测后加入了下、左两条线是否需要取出的判断,如果当前圈圈的终点x/y小于等于起点x/y,那么显然当前圈圈只是一条横向或者纵向的线了</p>
</div>
JavaScript
Array.prototype.max = function(){
return Math.max.apply({},this)
}
Array.prototype.min = function(){
return Math.min.apply({},this.filter(item=>item!=null))
}
Array.prototype.sum=function(){
return eval(this.join("+"))
}
var test3List = [
[
[1,1,1,0],
[1,1,1,0],
[1,1,1,0],
[1,1,1,1],
[0,1,1,1],
[1,0,1,1],
],
[
[1,1,0,0],
[1,0,0,0],
[0,1,0,1]
],
[
[1]
]
];
new Vue({
el: '#app',
data: {
arrTest1:[],
randomNum:10, // 随机多少个数字
takeNum:3,
arrOptimum:[],
takeNum2:3,
test2Result: [],
arrTest3:test3List[0],
pathList:[],
failList:[],
maxRect:null,
arrTest4: [
[2,3,4,8],
[5,7,9,12],
[1,0,6,10]
],
clockwise: "",
},
computed:{
test1Optimum:function(){
if(this.arrOptimum.length<=0){
return "";
}
let str = this.arrOptimum.join("+");
return `${str} = ${this.arrOptimum.sum()}`;
},
arr3Show:function(){
if(this.arrTest3.length<=0){
return "";
}
return this.arrTest3.map(item=>{
return item.map(_item=>_item?"true":"false").join(",")
}).join("\n");
},
rectWidth:function(){
return this.arrTest3[0].length;
},
rectHeight:function(){
return this.arrTest3.length;
},
arr4Show:function(){
if(this.arrTest4.length<=0){
return "";
}
return this.arrTest4.map(item=>{
return item.join(",")
}).join("\n");
},
},
methods:{
// --------------------------------------- 第一题 ------------------------------------------------
randomArrTest1:function(){
let temp = [];
while(temp.length<this.randomNum){
let nowRandomNum = Math.floor(Math.random()*this.randomNum*2+1);
if(temp.indexOf(nowRandomNum)<0){
temp.push(nowRandomNum);
}
}
...