1. 程式人生 > >約瑟夫問題

約瑟夫問題

free spa nbsp alloc () color scan init pre

額,直接上代碼:

typedef struct Node
{
    int data;
    struct Node *next;
}Node;

void circle_init(Node *head, const int len);
void circle_kill(Node *head, int num, const int len);
void circle_print(Node *head);
void circle_des(Node *head);

int main()
{
    int len;
    int num;
    Node head = {0, &head};
    
    printf(
"輸入人數:"); scanf("%d", &len); circle_init(&head, len); circle_print(&head); printf("輸入num:"); scanf("%d", &num); circle_kill(&head, num, len); //circle_des(&head); return 0; } void circle_init(Node *head, const int len) {
int i = 0; Node *p = head; for(i=0; i<len; i++) { p->next = (Node *)malloc(sizeof(Node)); p = p->next; p->data = i + 1; p->next = head->next; } } void circle_kill(Node *head, int num, const int len) { Node *p = head->next; Node
*temp = NULL; int left = len; int i = 0; do { num = num % left; for(i=1; i<num-1; i++) { p = p->next; } temp = p->next; p->next = temp->next; p = temp->next; printf("%d ", temp->data); free(temp); left -= 1; }while(left != 1); printf("%d ", p->data); free(p); head->next = head; } void circle_print(Node *head) { Node *p = head->next; printf("鏈表:\n"); do { printf("%d ", p->data); p = p->next; }while(p != head->next); printf("\n"); } void circle_des(Node *head) { Node *p = head->next; Node *temp = NULL; do { temp = p->next; free(p); p = temp; }while(p->next != head->next); free(p); head->next = head; }

約瑟夫問題