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

สามารถสร้างรหัส C++ เพื่อนับจำนวนกลุ่มสูงสุดได้


สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n มีนักเรียน n กลุ่ม กลุ่มคือคนเดียวที่สามารถเขียนรหัสกับคนอื่นหรือสองคนที่ต้องการเขียนรหัสในทีมเดียวกัน แต่พี่เลี้ยงตัดสินใจตั้งทีมสามคนพอดี เราต้องหาจำนวนทีมสูงสุดสามคนที่พี่เลี้ยงสามารถสร้างขึ้นได้ สำหรับกลุ่มที่มี 2 คน นักเรียนทั้งสองควรเขียนโค้ด หรือไม่ก็ไม่ควรทั้งคู่ หากนักเรียนสองคนจากกลุ่มละสองคนจะเขียนโค้ด พวกเขาควรอยู่ทีมเดียวกัน

ดังนั้นหากอินพุตเป็นเหมือน A =[2, 2, 2, 1, 1, 1, 1] ผลลัพธ์จะเป็น 3 เพราะพี่เลี้ยงสามารถสร้างทีมได้เช่น:[กลุ่มแรกสองคนและกลุ่มที่เจ็ด ของหนึ่งคน], [กลุ่มที่สองของสองคนและกลุ่มที่หกของหนึ่งคน], [กลุ่มที่สามของสองคนและกลุ่มที่สี่ของหนึ่งคน].

ขั้นตอน

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

p := 0
q := 0
x := size of A
for initialize i := 0, when i < x, update (increase i by 1), do:
   a := A[i]
   if a is same as 1, then:
      p := p + 1
   Otherwise
      q := q + 1
if p > q, then:
   return q + (p - q)
otherwise when p < q, then:
   return p
Otherwise
   return p

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A){
   int p = 0, q = 0;
   int x = A.size();
   for (int i = 0; i < x; i++){
      int a = A[i];
      if (a == 1){
         p = p + 1;
      }
      else{
         q = q + 1;
      }
   }
   if (p > q){
      return q + (p - q) / 3;
   }
   else if (p < q){
      return p;
   }
   else{
      return p;
   }
}
int main(){
   vector<int> A = { 2, 2, 2, 1, 1, 1, 1 };
   cout << solve(A) << endl;
}

อินพุต

{ 2, 2, 2, 1, 1, 1, 1 }

ผลลัพธ์

3