โจทย์: เด็ก n คนยืนวงกลม หมายเลข 1 ถึง n ตามเข็มนาฬิกา เด็ก 1 ถือลูกบอล ทอยไปคนถัดไป แล้วคนที่ 2 ทอยข้าม 1 คน (ไปหา 4) คนที่ 4 ทอยข้าม 2 คน (ไปหา 7) ... หาหมายเลขเด็กที่ได้ลูกบอลหลังการทอยแต่ละครั้ง
Input: n=10 → Output: [2,4,7,1,6,2,9,7,6]
ขั้นตอนแก้
p := 1
for i := 1 to n-1:
p := p + i
p := p mod n
if p == 0: p := n
print pตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
void solve(int n) {
int p = 1;
for (int i = 1; i < n; i++) {
p += i;
p %= n;
if (!p) p = n;
printf("%d, ", p);
}
}
int main() {
int n = 10;
solve(n);
}Input
10
Output
2, 4, 7, 1, 6, 2, 9, 7, 6,