ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีการแจกจ่าย 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
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น