1. 程式人生 > >抽紙牌,任意張牌,1拿一張到牌底,2拿一張放到桌面,重復1,2操作,直到手中沒牌,最後桌子上的牌是從1到n有序,求出牌排放順序。

抽紙牌,任意張牌,1拿一張到牌底,2拿一張放到桌面,重復1,2操作,直到手中沒牌,最後桌子上的牌是從1到n有序,求出牌排放順序。

size i++ mine fir ray port ++ tps 開始

抽紙牌,任意張牌,1拿一張到牌底,2拿一張放到桌面,重復1,2操作,直到手中沒牌,最後桌子上的牌是從1到n有序,求出牌排放順序。

很久以前的代碼,電腦清理,留存

package linkedlist;

import java.util.ArrayList;
import java.util.LinkedList;
/**
 * 抽紙牌,任意張牌,1拿一張到牌底,2拿一張放到桌面,,重復1,2操作,使桌面的牌形成12345~順序排列,求出牌排放順序
 * @author https://github.com/famine-life
 * 
 * 本程序假設5張
 *
 */
public class test {

    public static void main(String[] args) {
        //ArrayList list0 = new ArrayList();
        LinkedList<Integer> list0 = new LinkedList<Integer>();  //要求出的數列
        LinkedList<Integer> list1 = new LinkedList<Integer>();  //設置list1為:12345
        LinkedList<Integer> list2 = new LinkedList<Integer>();  //12345執行遊戲規則後的數列
        LinkedList<Integer> list_test = new LinkedList<Integer>();  //用於驗證的
        list1.add(1);
        list1.add(2);
        list1.add(3);
        list1.add(4);
        list1.add(5);
        
        System.out.println("初始list1:"+list1);
        System.out.println("=========");
        System.out.println("執行遊戲規則後:");
        for(int i=0;list2.size()<5;i++)
        {
            list1.add(list1.removeFirst());     
            list2.add(list1.getFirst());        
            list1.removeFirst();                
        }
        

        System.out.println("list1:"+list1);
        System.out.println("list2:"+list2);     //2, 4, 1, 5, 3
        System.out.println("==================");
        
        System.out.println("發現list2的值作為list1的下標,他們的值就會相等:(下標從1開始)");
        
        list1.add(1); //從新初始化list1
        list1.add(2);
        list1.add(3);
        list1.add(4);
        list1.add(5);
        for(int j=0;j<list2.size();j++)
            System.out.print(list1.get(list2.get(j)-1));  //-1是因為防止數組溢出
        
        System.out.println();
        System.out.println("==================");
        System.out.println("那麽list0應該是這樣求:");
        
        list0.add(0); //初始化list0
        list0.add(0);
        list0.add(0);
        list0.add(0);
        list0.add(0);
        
        for(int k=0;k<list2.size();k++)
        {   
            //-1是因為防止數組溢出
            list0.set(list2.get(k)-1,list1.get(k));     //set(index,element)
        }
        System.out.println("輸出list0:");
        System.out.println(list0);
        
        
        //遍歷出List0
//      for(int x=0;x<list0.size(); x++)
//          System.out.println(x+","+list0.get(x));
        
        System.out.println("==================");
        System.out.println("驗證:");
        System.out.println("用List0執行遊戲規則:");
        
        for(int m=0;list_test.size()<5;m++)
        {
            list0.add(list0.removeFirst());     //list1.addLast(list1.removeLast());
            list_test.add(list0.getFirst());        //list0.addLast(list1.getLast());
            list0.removeFirst();                //list1.removeLast();
        }
        System.out.println("驗證輸出:"+list_test);
    }
    

}

輸出

初始list1:[1, 2, 3, 4, 5]
=========
執行遊戲規則後:
list1:[]
list2:[2, 4, 1, 5, 3]
==================
發現list2的值作為list1的下標,他們的值就會相等:(下標從1開始)
24153
==================
那麽list0應該是這樣求:
輸出list0:
[3, 1, 5, 2, 4]
==================
驗證:
用List0執行遊戲規則:
驗證輸出:[1, 2, 3, 4, 5]

抽紙牌,任意張牌,1拿一張到牌底,2拿一張放到桌面,重復1,2操作,直到手中沒牌,最後桌子上的牌是從1到n有序,求出牌排放順序。