ข้อความโจทย์
กำหนด 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