22 lines
694 B
Plaintext
22 lines
694 B
Plaintext
include c:\cxpl\codes;
|
|
|
|
func Prisoner(N, K); \Return final surviving prisoner
|
|
int N, K; \number of prisoners, number to skip
|
|
int I, J;
|
|
char A;
|
|
[A:= Reserve(N);
|
|
for I:= 0 to N-1 do A(I):= I;
|
|
I:= 0;
|
|
repeat I:= I+K-1; \skip to next prisoner
|
|
I:= rem(I/N); \wrap to start if necessary
|
|
IntOut(0, A(I)); ChOut(0, ^ ); \show killed prisoner
|
|
for J:= I to N-2 do A(J):= A(J+1); \shift survivors down
|
|
N:= N-1; \one less prisoner
|
|
until N=1;
|
|
return A(0);
|
|
];
|
|
|
|
[IntOut(0, Prisoner(5, 2)); CrLf(0);
|
|
IntOut(0, Prisoner(41, 3)); CrLf(0);
|
|
]
|