问题描述
现实现约瑟夫问题,循环链表来做事比较的常见的,但上网搜到几个非常好的算法,,但看不懂第二种方法,我照着网上的实现了一下,请各位大侠帮忙解释一下第二种算法的思路。importjava.util.Scanner;publicclassYuesefu{publicstaticvoidmain(String[]args){Scannerscan=newScanner(System.in);intn=scan.nextInt();intm=scan.nextInt();//第一种方法这是求最终的胜利者的还可以明白/*ints=0;for(inti=2;i<=n;i++){s=(s+m)%i;//System.out.println(s);}System.out.println(s+1);*///第二种方法//这个算法就没看懂了inti=0,p=0;while(++i<=n){p=i*m;while(p>n){p=p-n+(p-n-1)/(m-1);}System.out.println(p);}}}
解决方案
解决方案二:
先内循环,在外循环呗
解决方案三:
引用1楼boyone2009的回复:
先内循环,在外循环呗
哥们!你回复的也太给力了吧!这也是答案!。。。。。。。外循环,内循环,。。。。。。p=i*m;while(p>n){p=p-n+(p-n-1)/(m-1);}你看懂了为什么是这样的公式吗?
时间: 2024-08-29 21:24:56