2019-360笔试题-两数相加

    技术2023-06-24  109

    题目:

    给出两个在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))
    Processed: 0.010, SQL: 9