日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1192 约瑟夫问题(1)

發布時間:2024/8/23 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1192 约瑟夫问题(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1192?約瑟夫問題(1)

Time Limit :?2000/1000 MS(Java/Others)?| Memory Limit :65536/32768 KB(Java/Others)

Submits :?1235?| Solved :?716

Description

模擬這個游戲。有n個人圍成一圈,從第一個人開始沿順時針方向報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那個人?

Input

輸入一個整數n。(n<=1000)

Output

輸出最后剩下的數。

Sample Input

5

Sample Output

4

HINT


Source

NBU OJ 解題思路:解題方法:用了模擬法,也就是通過數組來模擬這個報數的過程,設置兩個數組其中一個用來存儲開始準備報數的編號,后一個數組用來對報完數后的編號進行更新,例如:a{123} 報到3的時候把3去掉也就是a[3]=0(我這邊是從一開始),然后剩下更新就由b數組來操作,其中_index為數組下標,下標之所以等于(flag+i)%ans 例如 12 當從1開始報數的時候報到3時候又回到下標1,以此類推,歐了。 代碼:import java.util.Scanner;public class Main {public static void main(String[] args){Scanner sc=new Scanner(System.in);//12345 1245 245 24 4int n=sc.nextInt();int a[]=new int[1000];int b[]=new int[1000];for(int i=1;i<=n;i++){a[i]=i;b[i]=i;}int ans=n;int _index=0;int flag=0;while(ans>1){for(int i=1;i<=3;i++){_index=i+flag;if(_index>ans)_index=_index%ans;if(i==3){a[_index]=0;ans--;}}if(_index==a.length){_index=1;}flag=_index;int m=1;for(int i=1;i<=n;i++){if(a[i]!=0){b[m++]=a[i];}else{flag-=1;}}a=b;}System.out.println(a[1]);}}

總結

以上是生活随笔為你收集整理的1192 约瑟夫问题(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。