约瑟夫问题 ╰半夏微凉° 2022-06-02 08:57 256阅读 0赞 <table> <tbody> <tr> <td>成绩</td> <td>10</td> <td>开启时间</td> <td>2017年09月27日 星期三 15:10</td> </tr> <tr> <td>折扣</td> <td>0.8</td> <td>折扣时间</td> <td>2017年10月20日 星期五 15:10</td> </tr> <tr> <td>允许迟交</td> <td>否</td> <td>关闭时间</td> <td>2018年01月8日 星期一 23:55</td> </tr> </tbody> </table> 约瑟夫问题 成绩10分折扣0.8 (本题要求用循环链表实现) 约瑟夫问题是一个经典的问题。已知n个人(不妨分别以编号1,2,3,…,n 代表)围坐在一张圆桌周围,从编号为 k 的人开始,从1开始顺时针报数1, 2, 3, ...,顺时针数到m 的那个人,出列并输出。然后从出列的下一个人开始,从1开始继续顺时针报数,数到m的那个人,出列并输出,…依此重复下去,直到圆桌周围的人全部出列。 输入:n,k,m 输出:按照出列的顺序依次输出出列人的编号,编号中间相隔一个空格,每10个编号为一行。 非法输入的对应输出如下 a) 输入::n、k、m任一个小于1 输出:n,m,k must bigger than 0. b) 输入:k>n 输出:k should not bigger than n. 例 输入 9,3,2 输出 4 6 8 1 3 7 2 9 5 <table style="color:rgb(68,68,68)"> <thead> <tr> <th> </th> <th>测试输入<a href="http://online.bit.edu.cn/moodle/help.php?component=programming&identifier=input&lang=zh_cn" title="关于“测试输入”的帮助" style="color:rgb(67,142,185)" rel="nofollow"><img src="http://online.bit.edu.cn/moodle/theme/image.php/lambda/core/1510491239/help" alt="关于“测试输入”的帮助"></a></th> <th>期待的输出<a href="http://online.bit.edu.cn/moodle/help.php?component=programming&identifier=expectedoutput&lang=zh_cn" title="关于“期待的输出”的帮助" style="color:rgb(67,142,185)" rel="nofollow"><img src="http://online.bit.edu.cn/moodle/theme/image.php/lambda/core/1510491239/help" alt="关于“期待的输出”的帮助"></a></th> <th>时间限制<a href="http://online.bit.edu.cn/moodle/help.php?component=programming&identifier=timelimit&lang=zh_cn" title="关于“时间限制”的帮助" style="color:rgb(67,142,185)" rel="nofollow"><img src="http://online.bit.edu.cn/moodle/theme/image.php/lambda/core/1510491239/help" alt="关于“时间限制”的帮助"></a></th> <th>内存限制<a href="http://online.bit.edu.cn/moodle/help.php?component=programming&identifier=memlimit&lang=zh_cn" title="关于“内存限制”的帮助" style="color:rgb(67,142,185)" rel="nofollow"><img src="http://online.bit.edu.cn/moodle/theme/image.php/lambda/core/1510491239/help" alt="关于“内存限制”的帮助"></a></th> <th>额外进程<a href="http://online.bit.edu.cn/moodle/help.php?component=programming&identifier=nproc&lang=zh_cn" title="关于“{$a} 个额外进程”的帮助" style="color:rgb(67,142,185)" rel="nofollow"><img src="http://online.bit.edu.cn/moodle/theme/image.php/lambda/core/1510491239/help" alt="关于“{$a} 个额外进程”的帮助"></a></th> </tr> </thead> <tbody> <tr> <td>测试用例 1</td> <td><a href="http://online.bit.edu.cn/moodle/mod/programming/testcase/download_io.php?id=64752&test=82417&type=in&download=0" style="color:rgb(67,142,185)" rel="nofollow">以文本方式显示</a> <div> <ol> <li>9,3,2↵</li> </ol> </div> </td> <td><a href="http://online.bit.edu.cn/moodle/mod/programming/testcase/download_io.php?id=64752&test=82417&type=out&download=0" style="color:rgb(67,142,185)" rel="nofollow">以文本方式显示</a> <div> <ol> <li>4 6 8 1 3 7 2 9 5↵</li> </ol> </div> </td> <td>1秒</td> <td>64M</td> <td>0</td> </tr> <tr> <td>测试用例 2</td> <td><a href="http://online.bit.edu.cn/moodle/mod/programming/testcase/download_io.php?id=64752&test=82414&type=in&download=0" style="color:rgb(67,142,185)" rel="nofollow">以文本方式显示</a> <div> <ol> <li>10,12,3↵</li> </ol> </div> </td> <td><a href="http://online.bit.edu.cn/moodle/mod/programming/testcase/download_io.php?id=64752&test=82414&type=out&download=0" style="color:rgb(67,142,185)" rel="nofollow">以文本方式显示</a> <div> <ol> <li>k should not bigger than n.↵</li> </ol> </div> </td> <td>1秒</td> <td>64M</td> <td>0</td> </tr> </tbody> </table> #include<stdio.h> #include<stdlib.h> int n, k, m; typedef struct node { int data; struct node*next; }*ptrnode,node; ptrnode creatList() { ptrnode head = NULL; ptrnode s, r; for (int i = 1; i <= n; i++) { s = (ptrnode)malloc(sizeof (struct node)); s->data = i; if (head == NULL) { head = s; } else { r->next = s; } r = s; } r->next = head; return head; } int main() { //freopen("1.txt", "r", stdin); scanf("%d,%d,%d", &n, &k, &m); if (m < 1 || k < 1 || n < 1) { printf("n,m,k must bigger than 0.\n"); return 0; } else if (k>n) { printf("k should not bigger than n.\n"); } else if (m == 1) { int i; for ( i = 1; i <= n; i++) { if (i % 10 == 0) printf("%d\n", k); else if (i==n) printf("%d\n", k); else printf("%d ", k); k++; if (k > n) k = 1; } } else { ptrnode head=creatList(); ptrnode p = head; int count = 0; struct node*pp; while (p->data !=k) p = p->next; int k = 0; int mark; /*while (1) { count++; if (count == m-1) { pp = p->next; p->next = pp->next; k++; if (k % 10 == 0) printf("%d\n", pp->data); else printf("%d ", pp->data); free(pp); count = 0; if (--n == 1) break; } p = p->next; } k++; printf("%d\n", p->data);*/ while (count < n) { for (int i = 1; i <m - 1; i++) p = p->next; pp = p->next; count++; if (count % 10 == 0||count==n) { printf("%d\n", pp->data); } else printf("%d ", pp->data); p->next = pp->next; free(pp); p = p->next; } } return 0; }
相关 约瑟夫问题 约瑟夫问题 作者:Ackarlix 这是一个非常经典的问题:n个骑士编号1,2,...,n,围坐在圆桌旁,编号为k的骑士从1开始报数,报到m的骑士出列,然后下一个位置再从1 刺骨的言语ヽ痛彻心扉/ 2022年09月19日 13:29/ 0 赞/ 186 阅读
相关 约瑟夫问题 约瑟夫问题如下: n个人围成一圈,从1号开始报数,报到m就退出,剩下的人从下一个人开始继续报数。。。问最后剩下的是谁?也可问每个人的死亡顺序. 这一题在数据量比较小的 太过爱你忘了你带给我的痛/ 2022年08月10日 17:55/ 0 赞/ 134 阅读
相关 约瑟夫问题 约瑟夫环问题:一圈共有N个人,开始报数,报到M的人自杀,然 后重新开始报数,问最后自杀的人是谁? ![Center][] 第一种方法:循环思想 待我称王封你为后i/ 2022年08月08日 00:39/ 0 赞/ 168 阅读
相关 约瑟夫问题 适合队列初学者 \include<queue> //队列 头文件 queue<int>q; //定义队列q,I ゝ一世哀愁。/ 2022年08月04日 04:10/ 0 赞/ 164 阅读
相关 约瑟夫问题 Problem Description n个人想玩残酷的死亡游戏,游戏规则如下: n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被 £神魔★判官ぃ/ 2022年07月14日 12:44/ 0 赞/ 166 阅读
相关 约瑟夫问题 约瑟夫问题 Time Limit: 1000MS Memory Limit: 65536KB [Submit][] [ Statis 分手后的思念是犯贱/ 2022年06月18日 05:24/ 0 赞/ 165 阅读
相关 约瑟夫问题 <table> <tbody> <tr> <td>成绩</td> <td>10</td> <td>开启时间</td> <td>2017 ╰半夏微凉°/ 2022年06月02日 08:57/ 0 赞/ 257 阅读
相关 约瑟夫问题 1.知识点:循环链表 2.题意:n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,请输出最后一个人的编号 3.注意事项: 心已赠人/ 2022年05月30日 04:46/ 0 赞/ 156 阅读
相关 约瑟夫问题 Problem Description n个人想玩残酷的死亡游戏,游戏规则如下: n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人 我就是我/ 2022年05月16日 06:06/ 0 赞/ 170 阅读
相关 约瑟夫问题 约瑟夫问题 ![在这里插入图片描述][20181114211743434.jpg] 题目描述: 开始有5个人围成圆形,从0号开始,数2个人,谁被数到就 灰太狼/ 2022年04月16日 00:46/ 0 赞/ 182 阅读
还没有评论,来说两句吧...