国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

約瑟夫環問題

2019-11-08 18:29:31
字體:
來源:轉載
供稿:網友

約瑟夫環問題: 41個猶太人為了表示不像羅馬人屈服,決定集體自殺,其中由約瑟夫和他的朋友,他們兩個不想自殺。自殺的規則是41個人圍成圈,輪流報數,報到3的自殺,下一個從1開始從新報,以此類推。 約瑟夫和他的朋友想活下來就要讓他們成為最后兩個人,然后放棄自殺規則。問約瑟夫和他的朋友應該在環的哪兩個位置?

public static int[] Josep(int total,int live){ int[] dieOrder=new int[total];//記錄約瑟夫編號,即死亡順序 for(int i=0;i<total;i++){//逐個初始化 dieOrder[i]=0; } int i=0;//游標 int call=1;//報數 int die=0;//死亡人數 while(die<total-live){ if(i==total){ i=0;//如果到尾回到頭,形成環 } if(dieOrder[i]==0){//活人計數 if(call<3){ call++; }else{ dieOrder[i]=++die;//記錄約瑟夫編號 //System.out.更復雜的約瑟夫環是自殺規則不定,每個人有一個數字,一個人自殺后,后面的人需要報數到這個數字才自殺。需要更靈活:

public static int[] hardJosep(int total,int live,int[] no){//no存儲每個人的自殺規則數字 int[] dieOrder=new int[total];//記錄約瑟夫編號,即死亡順序 for(int i=0;i<total;i++){//逐個初始化 dieOrder[i]=0; } int i=0;//游標 int call=1;//報數 int die=0;//死亡人數 int callNum=no[0]; while(die<total-live){ if(i==total){ i=0;//如果到尾回到頭,形成環 } if(dieOrder[i]==0){//活人計數 if(call<callNum){ call++; }else{ dieOrder[i]=++die;//記錄約瑟夫編號 System.out.println("第"+die+"個自殺的人是 "+(i+1)+"號"); call=1; callNum=no[i]; } } i++;//移動位置 } int[] survive=new int[live]; int k=0; System.out.print("可以活下來的位置是:"); for(int j=0;j<total;j++){ if(dieOrder[j]==0){ System.out.print(j+1+" "); survive[k]=j+1; k++; } } return survive; }

當no都是3時和普通約瑟夫環相同,當給no附復雜的數組,就會產生不同的結果。

public static void main(String[] args){ //JosepCircle.Josep(41, 2); int[] no=new int[41]; for(int i=0;i<41;i++){ no[i]=i+1; } JosepCircle.hardJosep(41, 2, no); }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大英县| 贵德县| 克什克腾旗| 安龙县| 库尔勒市| 河曲县| 瑞安市| 云霄县| 遂平县| 馆陶县| 灵川县| 清水河县| 天等县| 金川县| 河南省| 申扎县| 大埔县| 泗水县| 临西县| 延安市| 蓬溪县| 依兰县| 内黄县| 乐至县| 永登县| 肇源县| 余庆县| 宝山区| 新安县| 盘锦市| 望谟县| 昌黎县| 麻城市| 重庆市| 鹤山市| 句容市| 田东县| 贡山| 临湘市| 深州市| 安乡县|