首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

请问一个有趣的算法?

2012-03-03 
请教一个有趣的算法???小时候玩过这样的游戏:一副扑克牌,抽出一种花色:黑桃1-13(13张)。按一定顺序(方法)排

请教一个有趣的算法???
小时候玩过这样的游戏:
一副扑克牌,抽出一种花色:黑桃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种花色呢?不只是要按循序,还要按花色。



[解决办法]
其实就是用倒置的方法。

Java code
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;    } 

热点排行