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

จำนวนช็อกโกแลตสูงสุดที่แจกให้นักเรียน k คนเท่ากันในภาษา C

เราได้รับจำนวนช็อกโกแลตในกล่องที่เรียงติดกันเป็นอาร์เรย์ และตัวเลข k ที่แทนจำนวนนักเรียนที่จะแจกช็อกโกแลต งานคือเลือกกล่องที่ติดกัน使得ผลรวมของช็อกโกแลตในกล่องเหล่านั้นสามารถแจกให้นักเรียน k คนเท่ากันได้ และต้องทำให้จำนวนช็อกโกแลตเป็นสูงสุด

สำหรับเรื่องนี้ เราจะวนอาร์เรย์จากซ้ายไปขวาและเริ่มบวกจำนวนช็อกโกแลตแล้วหารด้วย k หากหารลงตัว (เศษเท่ากับ 0) ให้เก็บผลรวมนี้ในตัวแปร เมื่อเคลื่อนที่ต่อไป เราทำซ้ำกระบวนการจนได้ผลรวมสูงสุดที่เป็นไปได้ ปัญหาคือการหาผลรวมสูงสุดของ subarray ที่หารด้วย k ลงตัว

ตัวอย่าง

อินพุต

Choco[] = { 1, 2, 4, 5, 2, 8, 3, 5 } k = 3

เอาต์พุต — จำนวนช็อกโกแลตสูงสุดที่แจกให้นักเรียน k คนเท่ากัน — 5

คำอธิบาย — Subarray สูงสุดคือ { 5, 2, 8 } ผลรวมช็อกโกแลตคือ 15 แจกเท่ากัน นักเรียน 3 คนได้คนละ 5 ชิ้น

หมายเหตุ — กล่องติดกันและดัชนีคือ { 3, 4, 5 }

อินพุต

Choco[] = { 2, 3, 7, 5, 4, 8, 2, 6 } k = 5

เอาต์พุต — จำนวนช็อกโกแลตสูงสุดที่แจกให้นักเรียน k คนเท่ากัน — 7

วิธีการที่ใช้ในโปรแกรม

  • รับอาร์เรย์จำนวนเต็ม arr[] ที่มีจำนวนช็อกโกแลตในกล่องติดกัน
  • จำนวนองค์ประกอบ 'n' แทนจำนวนกล่อง
  • รับจำนวนนักเรียน 'k' เป็นอินพุต
  • ฟังก์ชัน maxChocolate(int arr[], int n, int k) รับสามอาร์กิวเมนต์ — อาร์เรย์, ขนาด, และจำนวนนักเรียน k
  • เริ่มวน arr[] จากจุดเริ่มต้นด้วยลูป for
  • ใช้ตัวแปร sum และ maxSum sum เก็บผลรวมขององค์ประกอบติดกันของ subarray
  • maxSum ใช้เก็บผลรวมสูงสุดที่พบจนถึงตอนนี้
  • ใน nested for loop บวกองค์ประกอบต่อเนื่องและตรวจสอบว่า sum%k ให้เศษ 0 หรือไม่ และถ้า sum > maxSum ให้อัปเดต maxSum
  • สุดท้าย maxSum จะมีจำนวนช็อกโกแลตสูงสุดที่หารด้วย k ลงตัว
  • คืนค่าผลลัพธ์เป็น maxSum/k ซึ่งคือจำนวนช็อกโกแลตที่นักเรียนแต่ละคนได้

ตัวอย่างโค้ด

#include <stdio.h>

// หาจำนวนช็อกโกแลตสูงสุดที่แจกให้นักเรียน k คนเท่ากัน
int maxChocolates(int arr[], int n, int k) {
    int sum;
    int maxSum = 0;
    for(int i = 0; i < n; i++) {
        sum = 0;
        for(int j = i; j < n; j++) {
            sum += arr[j];
            if(sum % k == 0 && sum > maxSum)
                maxSum = sum;
        }
    }
    // แจกเท่ากันให้ 'k' นักเรียน
    return (maxSum / k);
}

int main() {
    int arr[] = { 2, 7, 6, 1, 4, 5, 5, 3 };
    int n = 8;
    int k = 3;
    printf("จำนวนช็อกโกแลตสูงสุดที่แจกให้นักเรียน k คนเท่ากัน: %d", maxChocolates(arr, n, k));
    return 0;
}

ผลลัพธ์

หากรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้ —

จำนวนช็อกโกแลตสูงสุดที่แจกให้นักเรียน k คนเท่ากัน — 11