抽纸牌,任意张牌,1拿一张到牌底,2拿一张放到桌面,重复1,2操作,直到手中没牌,最后桌子上的牌是从1到n有序,求出牌排放顺序。
抽纸牌,任意张牌,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]