js编程题个人解法

// 1.小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢?


function sortNumber(a, b) {
    return a - b;
}

var arr = [1, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5,]
arr.sort(sortNumber);
var obj = {};
for (var i = 0; i < arr.length; i++) {
    if (!obj[arr[i]]) {
        obj[arr[i]] = 1
    } else {
        obj[arr[i]]++
    }
}

var newIndex = []
for (key in obj) {
    newIndex.push(obj[key])
}
console.log("差最大值有" + newIndex[newIndex.length - 1] * newIndex[0] + "对")
if (newIndex.length == 1) {
    console.log("差值最小有" + arr.length * (arr.length - 1) / 2 + "对")
} else {
    var cfTime = 0
    for (let i = 0; i < newIndex.length; i++) {
        if (newIndex[i] > 1) { // 说明有重复的
            cfTime += newIndex[i] * (newIndex[i] - 1) / 2
        }
    }
    if (cfTime > 0) {
        console.log("差值最小有" + cfTime + "对")
    }

    if (cfTime == 0) { //说明没有重复
        var minTime = 0
        var minVal = arr[arr.length - 1] - arr[0];
        for (var i = 0; i < arr.length; i++) {
            if (arr[i + 1] - arr[i] < minVal) {
                minVal = arr[i + 1] - arr[i]

            }
        }
        for (var i = 0; i < arr.length; i++) {
            if (arr[i + 1] - arr[i] == minVal) {
                minTime++
            }
        }

        console.log("差值最小有" + minTime + "对")
    }
}
//...................................................................................
// 2.小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间你能帮帮小Q吗?
var str1 = "AkleBiCeilD"
var arr = str1.split("");
var newarr = []
for (var i = 0; i < arr.length; i++) {
    if (arr[i].charCodeAt(0) < 90) { //用编码值判断
        newarr.push(arr[i])
        arr.splice(i, 1)
    }
}
console.log(arr.concat(newarr))

//.............................................................................
//3. 字符串截取
function quertUrl(name) {
    var url = "http://mail.163.com/?a=1&b=2&c=3"
    if (url.indexOf("?") < 0) {
        return ""
    }
    else {
        var arr1 = url.split("?")[1]
        var arr2 = arr1.split("&")
        var newObj = {};
        for (var i = 0; i < arr2.length; i++) {
            newObj[arr2[i].split("=")[0]] = arr2[i].split("=")[1]
        }
        return newObj[name]
    }
}

console.log(quertUrl("c"))

//...........................................................................

// 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
var keleNumber = 0
var ping = 0
function comPuterTime(n) {
    var a1 = Math.floor(n / 3)
    keleNumber += a1;
    var b1 = n % 3;
    if (a1 + b1 < 3) {
        if (a1 == 1 && b1 == 0) {
            ping = keleNumber
        } else if (a1 == 0 && b1 == 1) {
            ping = keleNumber
        } else if (a1 == 0 && b1 == 0) {
            ping = keleNumber
        } else {
            ping = keleNumber + 1

        }
    } else {
        comPuterTime(a1+b1)
    }
    return ping

}
console.log("能喝" + comPuterTime(20) + "汽水")

/*.........................................................................*/
var maxNum
var minNum
var val
function computerNum(num1,num2) {
    maxNum=num1-num2>0? num1:num2
    minNum=num1-num2<0? num1:num2
    val=maxNum%minNum
    while (val!=0){
        computerNum(minNum,val)
    }
    return minNum;

}
console.log("最大公约数"+computerNum(18,37))
  //最小公倍数
function computerMAxNum(a,b) {
    return  total=a*b/computerNum(a,b)

}
console.log("最小公倍数"+computerMAxNum(12,3))


/*.........................................................................*/
// 深度复制
Object.prototype.clone=function(){
    //原型指向保持一致
    var newobj=Object.create(Object.getPrototypeOf(this));
    //自身属性保持一样
    var propNames=Object.getOwnPropertyNames(this);
    propNames.forEach(function(item){
        //保持每个属性的特性也一样
        var des=Object.getOwnPropertyDescriptor(this,item);
        Object.defineProperty(newobj,item,des);
    },this);
    return newobj;
}
var obj={"a":"123","b":"456","c":[1,2,{"china":"good"}]}
 console.log(obj.clone())


     /*............................................................................................*/
     // 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
     function outResuls(str) {
            var newStr=str.substring(2,str.length).split("").reverse().join("")

            var val=0;
            for(var i=0;i<newStr.length;i++){
                  if(newStr[i]=="A"){
                      val+=parseFloat("10")* Math.pow(16,i);
                  }else if(newStr[i]=="B"){
                      val+=parseFloat("11")* Math.pow(16,i);
                  }else if(newStr[i]=="C"){
                      val+=parseFloat("12")* Math.pow(16,i);
                  }
                  else if(newStr[i]=="D"){
                      val+=parseFloat("13")* Math.pow(16,i);
                  }
                  else if(newStr[i]=="E"){
                      val+=parseFloat("14")* Math.pow(16,i);
                  }
                  else if(newStr[i]=="F"){
                      val+=parseFloat("15")* Math.pow(16,i);
                  }else{
                      val+=parseFloat(newStr[i])* Math.pow(16,i);
                  }

            }

            return val.toString();
      }
      console.log(outResuls("0x12"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值