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

จำนวนอีเมลน้อยที่สุดเพื่อแจกคำถามทั้งหมดด้วย C++

ข้อความโจทย์

กำหนด N คำถามในแบบทดสอบ และ K นักเรียนในชั้นเรียน จากชุด K นักเรียน N นักเรียนจดจำคำถามได้ถูกต้องเพียงหนึ่งข้อต่อคน อีเมลหนึ่งฉบับสามารถบรรจุคำถามได้สูงสุด X ข้อ

หาจำนวนอีเมลขั้นต่ำที่จำเป็น เพื่อให้ทั้งชั้นเรียนได้รู้จักคำถามทั้งหมด

ถ้า N = 3, K = 3, X = 1 แล้วต้องส่ง 6 อีเมล -

  • นักเรียน 1 ส่งคำถามของเขาให้นักเรียน 2 และ 3 (2 อีเมล)
  • นักเรียน 2 และ 3 ทำเช่นกัน ดังนั้นอีเมลทั้งหมด = 2 * 3 = 6

อัลกอริทึม

คำตอบสุดท้ายสามารถคำนวณได้โดยใช้สูตรด้านล่าง -

ceil(N/X) * (K-N) + (( ceil((N-1)/X)) * (N-1)) + (N-1)

ตัวอย่างโค้ด

#include <iostream>
#include <cmath>
using namespace std;

int minMailsToBeSent(int n, int k, int x) {
    int m = (n - 1) + ceil((n - 1) * 1.0 / x) * (n - 1) + ceil(n * 1.0 / x) * (k - n);
    return m;
}

int main() {
    int questions = 3;
    int students = 3;
    int X = 1;
    cout << "No of mails to be sent: " << minMailsToBeSent(questions, students, X) << endl;
    return 0;
}

ผลลัพธ์

เมื่อคอมไพล์และรันโปรแกรมด้านบน จะได้ผลลัพธ์ดังนี้ -

No of mails to be sent: 6