【C#学习】利用数组解决约瑟夫环问题
2013-07-25 11:15
357 查看
约瑟夫环问题即设有n个人坐成一个圈,从某个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人再次出列,如此反复循环,直到所有人都出列为止,最后按出列顺序输出。
话不多说,直接看代码吧。using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 约瑟夫环 { class Program { #region /// <summary> /// 约瑟夫环问题 /// </summary> /// <param name="total">总人数</param> /// <param name="start">开始报数的人</param> /// <param name="alter">要出列的人</param> /// <returns>返回一个int类型的一维数组</returns> static int[] Jose(int total,int start,int alter) { int j, k = 0; //intCounts数组存储按出列顺序的数据,以当结果返回 int[] intCounts = new int[total + 1]; //intPers数组存储初始数据 int[] intPers = new int[total + 1]; //对数组intPers赋初值,第一个人序号为0,第二人为1,以此类推 for (int i = 0; i < total; i++) { intPers[i] = i; } //按出列顺序依次存于数组intCounts中 for (int i = total; i >= 2; i-- ) //i代表总人数,i--表示总人数减少 { start = (start + alter - 1) % i; if (start == 0) start = i; intCounts[k] = intPers[start]; k++; //将数到m的人出列 for (j = start + 1; j <= i; j++) intPers[j - 1] = intPers[j]; } intCounts[k] = intPers[1]; //结果返回 return intCounts; } #endregion static void Main(string[] args) { int[] intPers = Jose(12, 3, 4); Console.WriteLine("出列顺序:"); for (int i = 0; i < intPers.Length; i++) { Console.Write(intPers[i] + " "); } Console.ReadLine(); } } }
Ctrl+F5输出结果:
=。=
相关文章推荐
- 利用数组解决约瑟夫环问题
- 【c语言】使用数组解决 约瑟夫环问题
- 前端开发学习之——利用模板实现涉及url问题时的bug分析及解决(chrome源码)
- 链表的应用:利用无头结点循环链表解决约瑟夫环问题
- C#中ArrayList 与 string、string[]数组 的转换 (转学习:今天做项目时遇到一个arrylist转换问题,做记录)
- C#学习过程中解决的问题
- 终于搞清楚了C#二进制的一些关键操作了,解决了微软面试题,求数组中两两之差绝对值最小的值O(N)最少内存限制的问题!
- 算法学习笔记之四:巧妙运用指针解决链表、字符串、数组等问题(同向双指针VS对向双指针)
- C#学习中遇到问题、解决问题(1)
- 利用javascript解决相关的数组问题
- TTD工具-学习如何利用FitNesse解决开发质量方面的问题
- 数据结构(C#)--利用动态规划解决0-1背包问题
- 谷歌开放语音命令数据集,助力初学者利用深度学习解决音频识别问题
- 关于数组以及c#学习问题
- 约瑟夫环问题-Java数组解决
- C#中利用GDI作图解决异或问题
- 存储中的一些技巧(利用数组下标解决问题总结)
- 学习如何利用FitNesse解决开发质量方面的问题 [转]
- 今天学习时突然联想到这样一个有趣但无用的问题:利用C语言(不能是其他语言)求两个整数的较大/小值-----要求不用if、三目?、switch、循环、数组、加减乘除求余、位运算符以及任何库函数
- Windows Phone 8 学习志(探索问题一:如何简单利用Windows Phone Runtime Component项目类型实现C#和C++交互)