约瑟夫环问题
来源:互联网 发布:在线二次元av淘宝 编辑:程序博客网 时间:2024/06/05 01:18
假设又m个人围成一圈,从第n个人开始报数m个,报到m的人出圈,输出每个人的出圈顺序。
class Program { static void Main(string[] args) { Program p = new Program(); p.Print(9,2,5); } //allNum 总人数 startNum 开始数的位置 num 步长 public void Print(int allNum,int startNum,int num) { int temp = 0; //声明一个存放跳出来的人的数组 int[] outPut = new int[allNum]; //声明一个数组存放出圈的人以打印出圈顺序 int[] arr = new int[allNum + 1]; //添加人allNum个 for (int i = 1; i <= allNum; i++) { arr[i] = i; } //遍历找到出圈的人,并将其放到数组的后边 for (int i = allNum; i > 1; i--) { startNum = (startNum + num - 1) % i; if (startNum == 0) startNum = allNum; outPut[temp] = arr[startNum]; temp++; for (int j = startNum; j < i; j++) { arr[j] = arr[j + 1]; } outPut[temp] = arr[1]; } for (int i = 0; i < allNum; i++) { Console.WriteLine("我是第" + outPut[i] + "个人,我是第" + (i + 1) + "个出圈的"); } } }主要逻辑在于找到出圈的人以及对出圈的人在原数组中的处理。
由于数组不能像List一样随意删除里面的元素,所以将已经出圈的人放到数组的后边,并且下次遍历时数组的长度减1。
outPut[temp] = arr[1];
数组中的第一个人必然是最后一个出圈的,当外层for循环完成时,将最后一个人添加进outPut数组中。
输出结果:
Tip:如果要删除数组中的元素的话,可以将其转换为List,删除元素后在转换成数组
int[] arry = new int[3] { 1,2,3}; ArrayList al = new ArrayList(arr); al.RemoveAt(1); arr = (int[])al.ToArray(typeof(int)); Debug.Log(arr.Length);
阅读全文
0 0
- 约瑟夫问题、约瑟夫环
- Josephus约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题(Josephus)
- 约瑟夫环问题--java
- 约瑟夫环问题 Josephus
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 求解约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- js实现图片预览的几种方式
- jade入门
- 计蒜客 网页跳转
- 使用flex图文混排
- hiho-hihoCoder挑战赛29-A-序列的值
- 约瑟夫环问题
- Record: C++命名规则
- 开个新博客 准备搞 2d,3d游戏了 delphi 的 顺便写一下教程,防止以后忘记
- http://write.blog.csdn.net/postedit
- http://write.blog.csdn.net/postedit
- TensorFlow Note 1 : Getting Started With TensorFlow
- VMware Ubuntu安装详细过程
- java 常用三大集合类
- 【面试】京东高级Java工程师面试小结