请教一个有趣的算法???
小时候玩过这样的游戏:
一副扑克牌,抽出一种花色:黑桃1-13(13张)。
按一定顺序(方法)排成(7,1,12,2,8,3,11,4,9,5,13,6,10)
然后把
7放到最后一张(10)后面,1掀开
12放到最后一张(7)后面,2掀开
一直这样循环
最后掀开的会按1-13排开。
有没办法求出按什么样的循序排列(方法)才会出现这样的情况。
这是一种花色的情况。
如果是4种花色呢?不只是要按循序,还要按花色。
[解决办法]
其实就是用倒置的方法。
import java.util.ArrayList;public class Main { public Main () { start (); } public static void main (String args[]) { new Main (); } private void start () { int s = n*m; ArrayList<Integer> iarr = new ArrayList<Integer>(s); for (int i = 0; i < s; i++) { iarr.add (s-i); } int i = 1; do{ int x = iarr.get (0); iarr.remove (0); iarr.add (i,x); i++; }while(i < s); for (int j = 0; j < s; j++) { int x = iarr.get (s-1-j); if (x%n == 0) { System.out.print ( n + "(" + (x/n-1) + ") "); } else { System.out.print ( x%n + "(" + x/n + ") "); } } } private final int n = 13; private final int m = 4; }