โจทย์: มีนักเรียน n คน บางคนได้เหรียญ (memento) บางคนได้ใบประกาศนียบัตร (certificates) อื่นๆ ไม่ได้อะไร ผู้ได้รับรางวัลเรียกว่า "ผู้ชนะ" กฎ: จำนวนใบประกาศนียบัตรต้องเป็น k เท่าของเหรียญ จำนวนผู้ชนะไม่เกิน n/2 อาจไม่มีผู้ชนะเลย หาจำนวนผู้ชนะสูงสุด แล้วหาจำนวนคนได้เหรียญ ใบประกาศนียบัตร และไม่ใช่ผู้ชนะ
Input: n=18, k=2 → Output: [3, 6, 9]
ขั้นตอนแก้
x := (n / 2) / (1 + k) return x, (k * x), (n - (x + (k * x)))
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
void solve(int n, int k) {
int x = (n / 2) / (1 + k);
cout << x << ", " << (k * x) << ", " << (n - (x + (k * x)));
}
int main() {
int n = 18, k = 2;
solve(n, k);
}Input
8, 2
Output
3, 6, 9