15,440
社区成员
发帖
与我相关
我的任务
分享
//約瑟夫問題
#include <stdio.h>
#include <stdlib.h>
#define N 41
#define M 3
int main(void) {
int man[N] = {0};
int count = 1;
int i = 0, pos = -1;
int alive = 0;
while(count <= N) {
do {
pos = (pos+1) % N; // 環狀處理
if(man[pos] == 0)
i++;
if(i == M) { // 報數為3了
i = 0;
break;
}
} while(1);
man[pos] = count;
count++;
}
printf("\n約琴夫排列:");
for(i = 0; i < N; i++)
printf("%d ", man[i]);
printf("\n\n您想要救多少人?");
scanf("%d", &alive);
printf("\nL表示這%d人要放的位置:\n", alive);
for(i = 0; i < N; i++) {
if(man[i] > alive)
printf("D");
else
printf("L");
if((i+1) % 5 == 0)
printf(" ");
}
printf("\n");
return 0;
}
#include <stdio.h>
int main(){
int n, m, i, s=0;
printf ("N M = "); scanf("%d%d", &n, &m);
for (i=2; i<=n; i++) s=(s+m)%i;
printf ("The winner is %d\n", s+1);
}
#include <stdio.h>
int main(){
int n, m, i, s=0;
printf ("N M = "); scanf("%d%d", &n, &m);
for (i=2; i<=n; i++) s=(s+m)%i;
printf ("The winner is %d\n", s+1);
}