问题:手里面有1到n排序的纸牌,按照从上到下排列,现在对它进行如下操作:将第一张放到桌子上,再取一张放到纸牌堆底,这样循环操作,直到手里面没纸牌为止;那么假设桌子上的顺序是1到n,那么手上的牌原始排序是?
package acm;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import org.junit.Test;
/**
*类描述:排序问题
*@author: 张宇
*@date: 日期: 2018年9月10日 时间: 上午10:23:55
*@version 1.0
*/
public class Test1toN {
@Test
public void fun() {
Scanner input=new Scanner(System.in);
System.out.println("请输出n的值:");
int n=input.nextInt();
// 创建两个链表
List<Integer> list = new LinkedList<>();
// 一个链表里面存储1-n
for (int i = 1; i <= n; i++) {
list.add(i);
}
List<Integer> newList = getNewList(list);
// System.out.println(newList);
// 然后根据题目找到k,v之间的映射
Map<Integer, Integer> map = new HashMap<>();
int newIndex = 1;
for (Integer integer : newList) {
map.put(integer, newIndex++);
}
System.out.println(map.values().toString());
}
// 获取要求之后的链表
private List<Integer> getNewList(List<Integer> list) {
List<Integer> newList = new LinkedList<>();
boolean flag = true;
while (list.size() > 0) {
if (flag) {
newList.add(list.get(0));
list.remove(0);
} else {
list.add(list.get(0));
list.remove(0);
}
flag=!flag;
}
return newList;
}
}
最后执行结果:
[1, 6, 2, 10, 3, 7, 4, 9, 5, 8]