Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++ 프로그램에서 모든 공을 반복 없이 배포하기

<시간/>

이 튜토리얼에서는 누구에게도 피해를 주지 않고 k 학생에게 n개의 공을 분배하는 방법을 배울 것입니다.

아이디어는 간단합니다. 학생들에게 배포해야 하는 다양한 색상의 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

결론

튜토리얼에서 질문이 있는 경우 댓글 섹션에 언급하세요.