Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

อัลกอริทึมการเรียงลำดับรากดิจิทัล JavaScript


Digit root ของจำนวนเต็มบวกบางตัวถูกกำหนดเป็นผลรวมของตัวเลขทั้งหมด เราได้รับอาร์เรย์ของจำนวนเต็ม เราต้องเรียงลำดับในลักษณะที่ว่าถ้า a มาก่อน b ถ้ารากหลักของ a น้อยกว่าหรือเท่ากับรากหลักของ b หากตัวเลขสองตัวมีรูทหลักเหมือนกัน ตัวที่เล็กกว่า (ตามความหมายทั่วไป) ควรมาก่อน ตัวอย่างเช่น 4 และ 13 มีรูทหลักเหมือนกัน อย่างไรก็ตาม 4 <13 ดังนั้น 4 มาก่อน 13 ในการเรียงลำดับ digitRoot ที่มีทั้งคู่

ตัวอย่างเช่น

for a = [13, 20, 7, 4],
the output should be [20, 4, 13, 7].

มาเขียนโค้ดสำหรับปัญหานี้กันเถอะ -

เราจะแบ่งออกเป็นสองฟังก์ชัน คือ ฟังก์ชันแบบเรียกซ้ำที่นับผลรวมของตัวเลข จากนั้นฟังก์ชันการจัดเรียงที่เรียงลำดับองค์ประกอบตามผลรวมของตัวเลข

รหัสสำหรับสิ่งนี้จะเป็น −

ตัวอย่าง

const arr = [54, 23, 8, 89, 26];
const recursiveCount = (num, count = 0) => {
   if(num){
      return recursiveCount(Math.floor(num/10), count+num%10);
   };
   return count;
};
const sorter = (a, b) => {
   const countDifference = recursiveCount(a) - recursiveCount(b);
   return countDifference || a - b;
};
arr.sort(sorter);
console.log(arr);

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็น -

[ 23, 8, 26, 54, 89 ]