约瑟夫环问题(一)(难度:1颗星)
来源:互联网 发布:ubuntu 14.04 安装gcc 编辑:程序博客网 时间:2024/06/02 03:01
问题描述:
编号为1,2,…,n的n个人按顺时针方向围坐一圈,任选一个正整数作为报数上限m,从第一个人开始按顺时针方向从自1开始顺序报数,报道m时停止报数.报m的人出列,从他的顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止,设计一个程序求出出列顺序.
输入输出描述:
m和n由用户输入,并且保证m和n的范围是【1,1000】,输出出列序列。
问题分析:
因为这个是要求出所有的出列序列,所以目前还没想到效率更高的方法,只能用模拟法,时间复杂度是O(m*n),设置三个变量:
index:表示目前所执行的人的号码
count:表示目前报的数是多少
OutPeopleCount:表示目前出列的人数
如果是要求出最后一个出列人的标号,请参考我的另外一篇文章:
http://blog.csdn.net/yi_ming_he/article/details/72860011
参考代码:
#include <stdio.h>#include <string.h>#include <malloc.h>int main(){ int n, m, nIndex = 0, nCount = 1, nOutPeople = 0; scanf_s("%d%d", &n, &m); char *pIsOut = (char*)malloc(n * sizeof(char)); memset(pIsOut, 0, sizeof(char)* n); while (1) { if (1 == pIsOut[nIndex])//已经out了 { nIndex = (nIndex + 1) % n; continue; } if (nCount % m == 0) { pIsOut[nIndex] = 1; nOutPeople++; printf("%d\n", nIndex + 1); } if (nOutPeople == n) break; nIndex = (nIndex + 1) % n; nCount++; } free(pIsOut); return 0;}
运行结果:
阅读全文
0 0
- 约瑟夫环问题(一)(难度:1颗星)
- 约瑟夫环问题(二):(难度:2颗星)
- 实习题-约瑟夫环问题(一)
- 打渔晒网问题(难度:1颗星)
- 分糖果问题(难度:1颗星)
- 约瑟夫问题(约瑟夫环) java
- 空瓶换汽水问题(难度:1颗星)
- 约瑟夫环问题一解
- 约瑟夫环问题研究(一)
- Josephus问题(约瑟夫环)
- 报数问题(约瑟夫环)
- Josephus(约瑟夫环)问题
- 约瑟夫环问题(数论)
- (五)约瑟夫环问题
- 报数(约瑟夫环问题)
- 百钱买百鸡问题(难度:半颗星)
- 约瑟夫环(约瑟夫问题的变形,LA 3882)
- 约瑟夫斯问题(约瑟夫环)?待解决
- C注释转换为C++注释
- 网关
- Spring transaction事务 roll back各种回滚
- QT笔记
- 项目review--2017.05.27
- 约瑟夫环问题(一)(难度:1颗星)
- jquery生成二维码
- Java MD5加密工具类
- 5-3 模拟EXCEL排序 (25分)
- 外观模式
- html标签
- 若用链表存储一棵二叉树时,每个节点除数据域外,还有指向左孩子和右孩子的两个指针,在这种存储结构中,n歌节点的二叉树共有2N个指针域,其中有N-1个指针域存放了地址,有N+1个指针是空指针。
- GCC编译器一些参数区别(-I -l -L)
- POJ 1732 Phone numbers 笔记