Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

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


ปัญหา

สมมติว่ามีคน n คนยืนคิว เราต้องการแจกกล้วยให้ตามวิธีดังนี้:

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

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

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

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

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

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

const num = 3; 
const m = 10;

ผลลัพธ์ควรเป็น

const output = [5, 2, 3];

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

รอบที่ 1: res[0] += 1, อาร์เรย์เป็น [1,0,0]

รอบที่ 2: res[1] += 2, อาร์เรย์เป็น [1,2,0]

รอบที่ 3: res[2] += 3, อาร์เรย์เป็น [1,2,3]

รอบที่ 4: 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]