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

แจกจ่ายลูกบอลทั้งหมดโดยไม่ซ้ำกันในโปรแกรม C++


ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีการแจกจ่าย 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

บทสรุป

หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น