电商平台网站建设,查询网138网站域名,简述网站开发平台,做片头网站1192 约瑟夫问题#xff08;1#xff09; Time Limit : 2000/1000 MS(Java/Others) | Memory Limit :65536/32768 KB(Java/Others) Submits : 1235 | Solved : 716 Description
模拟这个游戏。有n个人围成一圈#xff0c;从第一个人开始沿顺时针方向报数#xff08;从1到3… 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。(n1000) Output
输出最后剩下的数。 Sample Input
5Sample Output
4HINT Source
NBU OJ解题思路解题方法用了模拟法也就是通过数组来模拟这个报数的过程设置两个数组其中一个用来存储开始准备报数的编号后一个数组用来对报完数后的编号进行更新例如a{123} 报到3的时候把3去掉也就是a[3]0(我这边是从一开始)然后剩下更新就由b数组来操作其中_index为数组下标下标之所以等于(flagi)%ans 例如 12 当从1开始报数的时候报到3时候又回到下标1以此类推欧了。
代码import java.util.Scanner;public class Main {public static void main(String[] args){Scanner scnew Scanner(System.in);//12345 1245 245 24 4int nsc.nextInt();int a[]new int[1000];int b[]new int[1000];for(int i1;in;i){a[i]i;b[i]i;}int ansn;int _index0;int flag0;while(ans1){for(int i1;i3;i){_indexiflag;if(_indexans)_index_index%ans;if(i3){a[_index]0;ans--;}}if(_indexa.length){_index1;}flag_index;int m1;for(int i1;in;i){if(a[i]!0){b[m]a[i];}else{flag-1;}}ab;}System.out.println(a[1]);}}