Josephus问题

来源:互联网 发布:安全软件 编辑:程序博客网 时间:2024/05/16 08:29

Josephus问题:n个人围成一个圈,记为1、2、… 、n ,从1开始报数,报到k的人出圈,接着下一个人又从1开始报数,如此循环,直到只剩最后一人…

#include<stdio.h>#include<malloc.h>typedef struct List {    int data;    struct List *next;} LinkList;int main() {    LinkList *L, *r, *s;    L = (LinkList *)malloc(sizeof(LinkList));    r = L;    int n, i;    int k;    printf("n个人,报到k出圈,输入n、k:");    scanf("%d%d", &n, &k);    for (i = 1; i <= n; i++) {        s = (LinkList *)malloc(sizeof(LinkList));        s->data = i;        r->next = s;        r = s;    }    r->next = L->next;    LinkList *p;    p = L->next;    while (p->next != p) {        for (i = 1; i < k - 1; i++) {            p = p->next;        }        printf("%d ", p->next->data);        p->next = p->next->next;        p = p->next;    }    printf("%d\n", p->data);    return 0;}
#include<stdio.h>int main() {    int n, k;    printf("n个人,报到k出圈,输入n、k:");    scanf("%d%d", &n, &k);    int i;    int a[101];    int dead = 0;    int num = 0;    for (i = 1; i <= n; i++) {        a[i] = i;    }    for (i = 1; ; i++) {        if (i > n) {            i = i%n;        }        if (a[i] > 0)            num++;        if (k == num && dead != n - 1) {            printf("%d ", a[i]);            num = 0;            a[i] = 0;            dead++;        }        else if (k == num && dead == n - 1) {            printf("%d\n", a[i]);            break;        }    }}
原创粉丝点击