2019-360笔试题-两数相加

题目:

给出两个在m静之下含有N位的数字,你可以分别将这两个数各位上的数字重新排列,然后将两个数按位对应相加,并分别对m取模,这样显然可以得到一个新的m进制之下的N位数(可能存在前导0),但是这个结果是不唯一的,问题来了,按照这样的操作能够得到的最大的m进制下的数字是多少呢?

输入第一行包含两个正数n,m,分别表示数字含有n位,和在m进制下

输入第二行和第三行分别包含n个整数,中间用空格隔开,每个整数都在零到m-1之间,每行第i个数表示的是当前数第i位上的数字

输出包含n个数字中间用空格隔开,表示得到的最大的数字,从高位到低位输出,如6在二进制下输出三位的结果是1 1 0

输入
    5 5
    4 4 1 1 1
    4 3 0 1 2
    输出4 4 3 3 2

    提示
    4 4 1 1 1――1 4 1 4 1
    4 3 0 1 2――3 0 2 4 1
    重排序列不唯一,数位相加后的数字为4 4 3 8 2,对5取模即可

解决方法:

const add = (num1,num2,m)=>{
      let res = [];
      let tempArr = [];
      let tempj = 0;
      for(let i=0;i<num1.length;i++) {
        for(let j=0;j<num2.length;j++){
          let temp = num1[i]+num2[j];
          if(temp>=m) {
            temp=temp-m;
          }
          if(!tempArr.length) {
            tempArr.push(temp)
          }else{
            if(tempArr[0]<temp){
              tempj = j;
              tempArr[0]=temp;
            }
          }
        }
        num2.splice(tempj,1);
        res.push(tempArr[0])
        tempArr.length = 0
        tempj=0
      }
      return +res.sort((a,b)=>b-a).join('')
    }
    
    console.log(add([4,4,1,1,1],[4,3,0,1,2],5))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值