ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีการแจกจ่าย n ลูกสำหรับนักเรียน k คนโดยไม่ทำร้ายใคร
แนวคิดง่ายๆ เรามี n ลูกในสีต่างๆ ที่ต้องแจกจ่ายให้นักเรียน เราไม่ต้องให้ลูกบอลสีเดียวกันมากกว่าหนึ่งลูกแก่นักเรียนคนใด หากเป็นไปได้ที่นักเรียนจะได้ลูกบอลที่มีสีเดียวกันมากกว่าหนึ่งลูก ก็ไม่ควรแจกจ่าย
มาดูตัวอย่างกัน
ป้อนข้อมูล
n = 10 k = 5 ballsColors = "rrrgbrbgbr"
ผลผลิต
Yes
ไม่มีสีใดเกินจำนวนนักเรียน (k) ดังนั้นจะไม่มีนักเรียนคนใดได้ลูกบอลที่มีสีเดียวกันมากกว่าหนึ่งลูก
มาดูขั้นตอนการแก้ปัญหากัน
-
เริ่มต้นสี n, k และลูก
-
เริ่มต้นแผนที่เพื่อเก็บการนับสีของลูกบอล
-
วนซ้ำสีของลูกบอลและหาจำนวนสีของลูกบอลแต่ละสี
-
ตอนนี้ วนซ้ำนับแต่ละลูก
-
หากลูกบอลสีใดมากกว่าจำนวนนักเรียน ก็ไม่สามารถแจกจ่ายได้
-
มิฉะนั้นเราสามารถแจกจ่ายลูกบอลได้
-
-
พิมพ์ผลลัพธ์
ตัวอย่าง
มาดูโค้ดกันเลย
#include <bits/stdc++.h> using namespace std; bool canDistributeBalls(string ballsColors, int n, int k) { map<char, int> charCount; for (int i = 0; i < n; i++) { charCount[ballsColors[i]]++; } map<char , int >::iterator itr; for(itr = charCount.begin(); itr != charCount.end(); itr++) { if (itr->second > k) { return false; } } return true; } int main() { int n = 10, k = 5; string ballsColors = "rrrgbrbgbr"; if (canDistributeBalls(ballsColors, n, k)) { cout << "Yes" << endl; } else { cout << "No" << endl; } return 0; }
ผลลัพธ์
หากคุณเรียกใช้เพื่อรันโปรแกรมข้างต้น คุณจะได้ผลลัพธ์ดังต่อไปนี้
Yes
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น