约瑟夫环问题,帮忙了。

[复制链接]
查看11 | 回复1 | 2007-3-20 15:07:27 | 显示全部楼层 |阅读模式
package ysfh;/** * 【约瑟夫环的问题】 * 有17个人(编号从1到16),按编号依次排列成一个圆环(编号16的接着编号为1 的人),从编号为1 的人开始报数,数到3的人退出圆环,如此循环,最后留下的那个人的编号是什么? * 1,2,3,4,5,6,7,8,,9,10,11,12,13,14,15,16 * 要求:请用面向对象的思想来处理这个问题并在下面写出具体的代码(可以选择你熟悉的语言,如java/C++/C#等) * @author Administrator * */public class Ysfh {public static void main(String[] args) {m(5,8); }/*** * @param m 第几个人出列* @param n 人数*/ public static void m(int m,int n){int c = 1;int[] ns = ntoarray(n);while(isone(ns) == false){//如果数组中有一个以上的数不为0 for (int i = 0; i < ns.length; i++) {
if(ns != 0 ){//等于0的都退出了 所以从所有不等于0的开始
if(c == m){//是第三个数给他赋值0 并让计数器c从1 开始
ns = 0 ;
c = 1;
}else{//否则继续计数器下一个
c++;
}
}
}}//循环输出最后留下的数字 for (int i = 0; i < ns.length; i++) { if(ns != 0){//除0以外的数字 0代表删除
System.out.println(ns); }} }/*** 将 n 转换为数字n=3 {1,2,3}* @param n * @return*/ public static int[] ntoarray(int n){int[] ns = new int[n];for (int i = 0; i < ns.length; i++) { ns = i + 1;}return ns; }/*** 判断数组里是否只有一个数不为0* @param ns* @return*/ public static boolean isone(int[] ns){boolean isone = false;for (int i = 0; i < ns.length; i++) { if(isone == false && ns != 0){
isone = true; }else if(isone == true && ns != 0){
return false; }}return isone; }}
回复

使用道具 举报

千问 | 2007-3-20 15:07:27 | 显示全部楼层
你至少应该合并问题这样大家也比较方便
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行