C#约瑟夫问题解决方法


本文向大家介绍C#约瑟夫问题解决方法,包括了C#约瑟夫问题解决方法的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了C#约瑟夫问题解决方法。分享给大家供大家参考。具体分析如下:

决约瑟夫问题描述如下:

设有n个人围坐一圈,现以某个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人又出列,如此下去,直到所有人都出列为止.按出列顺序输出.

public class Josephas 
 //从第start人开始计数,以alter为单位循环记数出列,总人数为total 
 public int [ ] Jose(int total, int alter, int start)  
 {   
  int i, j, k = 0; 
  //count数组存储按出列顺序的数据,以当结果返回 
  int[] count = new int [ total+1];  
  //s数组存储初始数据 
  int[] s = new int [ total+1];  
  //对数组s赋初值,第一个人序号为0,第二人为1,依此下去 
  for (i = 0; i <total; i++)  
  { 
   s[i] = i; 
  } 
  //按出列次序依次存于数组count中 
  for (i = total; i >= 2; i--)  
  { 
   start = (start + alter - 1) % i; 
   if (start == 0) 
    start = i; 
   count[k] = s[start]; 
   k++; 
   for (j = start + 1; j <= i; j++)   
   s[j - 1] = s[j]; 
  }      
  count[k]=s[1]; 
  //结果返回 
  return count;  
 } 
}

希望本文所述对大家的C#程序设计有所帮助。

声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#yiidian.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。