码迷,mamicode.com
首页 > 其他好文 > 详细

约瑟夫环问题

时间:2018-10-24 22:11:54      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:pre   序号   ++   scan   数字   const   value   null   nbsp   

题目:设有x个人坐成一个圈,序号为依次为1,2,3......x,选定一个数字n,从1号开始从1报数,每次报到数字n时那个人自杀剩下的人继续从1开始报数,直到所有人都出列,求所有人自杀的顺序。(惊恐万分)

输入:人数x,数字n

输出:a1 a2 a3..... ax

 

示例输入: 

5  2

输出:

2 4 1 5 3

 

Answer:

 1 #include "stdio.h"
 2 
 3 #include "stdlib.h"
 4 
 5 //输入总人数和报的数字,输出所有人的死亡顺序
 6 void diesorder(List*plist,int total,int number);//输出顺序
 7 void deletenode(Node*plist,int n);//删除链表中某一结点
 8 void creat_list(List *plist,int number);//创造链表
 9 
10 //利用循环链表
11 
12 int main(int argc, char const *argv[])
13 {
14     int total,number;
15     printf("请输入总人数\n");
16     scanf("%d",&total);
17     printf("请输入所报的数\n");
18     scanf("%d",&number);
19     printf("死亡顺序为:\n");
20     
21     List josef;
22     diesorder(&josef,total,number);
23     
24     return 0;
25 }
26 
27 void creat_list(List *plist,int number)
28 {
29     
30     Node *p=(Node *)malloc(sizeof(Node));
31     p->value=number;
32     p->next=NULL;
33     
34     Node *last=plist->head;
35     if(last)
36     {
37         while(last->next)
38             last=last->next;//链接
39         last->next=p;
40     }
41     else
42         plist->head=p;
43 }
44 
45 void diesorder(List*plist,int total,int number){
46     for (int i=1; i<=total; i++) {
47         creat_list(plist, i);
48     }
49     
50     Node*p;
51     p=plist->head;
52     for (;p->next; p=p->next) {
53         ;
54     }//遍历到最后一个节点
55     p->next=plist->head;  //改造为循环链表
56     
57     Node*p2=plist->head;
58     for (int i=1; ;i++,p2=p2->next) {
59         if (i==number) {
60             i=0;printf("%i ",p2->value);deletenode(p2,total);total--;
61             }
62         if (total==0) {
63             break;
64         }
65         }
66 }
67 
68 void deletenode(Node*plist,int n){
69     Node*pre=plist;
70     for (int i=1;i<n; i++) {
71         pre=pre->next;
72     }
73     pre->next=plist->next;
74     Node*pp=plist;
75     plist=pre->next;
76     free(pp);
77     pp=NULL;
78     
79 }

 

约瑟夫环问题

标签:pre   序号   ++   scan   数字   const   value   null   nbsp   

原文地址:https://www.cnblogs.com/clclcl/p/9844140.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!