★柳暗花明★ 发表于 2012-12-22 21:29:41

JavaScript:一道约瑟夫环面试题

<div id="cnblogs_post_body">约瑟夫问题:N个人围成一圈,第一人从1开始报数,数到M的人出列,下一个人再从1开始报数,直到最后一个人,请写出算法。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>约瑟夫问题求解</title></head><body style="margin:0; padding:0 10px;"><p>约瑟夫问题:N个人围成一圈,第一人从1开始报数,数到M的人出列,下一个人再从1开始报数,直到最后一个人,请写出算法。</p><script language="javascript">function demo(){var n,m;var str1 = "输入信息格式有误!请重新输入信息!";var str2 = "输入信息不能为空!请重新输入信息!";var nm = prompt("请输入正整数N和M的值,以半角逗号分隔。" , "");if(nm){nm = nm.replace(/(^\s*)|(\s*$)/g,"");var ax = nm.split(",");var len = ax.length;if(len==2){if(isNaN(ax) || isNaN(ax) || ax==0 || ax==0){alert(str1); demo(1); return;}else{n = parseInt(ax); m = parseInt(ax);document.write("您输入的N="+n+",M="+m+".具体流程如下:<br/><br/>");}}else{ alert(str1); demo(); return; }}else{if(nm==""){ alert(str2); demo(); }return;}var arr = new Array();for(var i=0; i<n; i++){arr.push(i+1);}var t=0,loop=0;document.write("原数组:"+arr+"<br/>");while(arr.length > 1){t = (t + m - 1) % arr.length;arr.splice(t,1); //删除此人loop++;document.write("第 "+loop+" 趟:"+arr+"<br/>");}}</script><input type="button"value="查看执行过程" /></body></html>
页: [1]
查看完整版本: JavaScript:一道约瑟夫环面试题