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

แจกปัญหากล้วยใน JavaScript


ปัญหา

สมมติว่ามีคนยืนต่อคิวอยู่ n คน เราต้องการแจกกล้วยให้ประชาชนดังนี้ −

  • เราให้กล้วย 1 ลูกแก่คนแรก กล้วย 2 ลูกกับคนที่สอง และต่อไปเรื่อย ๆ จนกว่าเราจะแจกกล้วยให้คนสุดท้าย n ลูก

  • จากนั้นเรากลับไปที่จุดเริ่มต้นของแถวโดยให้กล้วย n + 1 อันแก่คนแรก n + 2 กล้วยกับคนที่สอง เป็นต้น จนกว่าเราจะให้กล้วย 2 * n กับคนสุดท้าย

  • กระบวนการนี้เกิดขึ้นซ้ำๆ (โดยที่เราให้กล้วยเพิ่มหนึ่งครั้งในแต่ละครั้ง และย้ายไปที่จุดเริ่มต้นของแถวหลังจากที่เราไปถึงจุดสิ้นสุด) จนกว่าขนมจะหมด คนสุดท้ายจะได้รับกล้วยที่เหลือทั้งหมดของเรา

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่ใช้จำนวนคน num เป็นอาร์กิวเมนต์แรก และจำนวนกล้วย m เป็นอาร์กิวเมนต์ที่สอง

ฟังก์ชันของเราควรส่งคืนอาร์เรย์ (ของความยาว num sum m) ที่แสดงถึงการกระจายตัวสุดท้ายของกล้วย

ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −

const num = 3;
const m = 10;

จากนั้นผลลัพธ์ควรเป็น −

const output = [5, 2, 3];

คำอธิบายผลลัพธ์:

ในเทิร์นแรก res[0] +=1 และอาร์เรย์คือ [1,0,0]

ในเทิร์นที่สอง res[1] +=2 และอาร์เรย์คือ [1,2,0]

ในเทิร์นที่สาม res[2] +=3 และอาร์เรย์คือ [1,2,3]

ในเทิร์นที่สี่ res[0] +=4 และอาร์เรย์สุดท้ายคือ [5,2,3]

ตัวอย่าง

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

const num = 3;
const m = 10;
const distributeBananas = (num = 1, m = 1) => {
   const res = new Array(num).fill(0);
   let curr = 1;
   while(true){
      for(let i = 0; i < num; i++){
         if(m < curr){
            res[i] += m
            return res
         };
         res[i] += curr;
         m -= curr;
         curr++;
      };
   };
};
console.log(distributeBananas(num, m));

ผลลัพธ์

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

[5, 2, 3]