2 20 40
1 7 19 1 19 37
解题思路:其实这是一个水的不能再水的题目,用两个数组交替变换值,根据题意利用数组下标把该去除的去除掉。不过博主用的是JavaArryList,毕竟ArryList不是我自己写的所以用起来就一直查API,然后各种问题,因为ArryList中的list.remove(int index)函数是把该下标元素去除,并且顺势把list改变,所以使用的时候一定需要注意这些细节,不然真的浪费时间。
代码实现:
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); ArrayList<Integer> list = new ArrayList<Integer>(); // 利用ArrayList实现排队 int n = sc.nextInt(); // 接收下面有多少组测试数据 while (n-- > 0) { int count = sc.nextInt(); // 接收有多少人排队 // 赋值,把每个人的编号add()到链表list中 for (int i = 1; i <= count; i++) { list.add(i); } boolean flag = true; //利用标记来实现两种方式的交替 while (list.size() > 3) { if (flag) { for (int i = 1; i < list.size(); i++) { list.remove(i); //直接移除是2的倍数的数值 } flag = false; } else { for (int j = 2; j < list.size(); j += 2) { list.remove(j); //直接移除是3的倍数的数值 } flag = true; } } System.out.print(list.remove(0));//输出第一个数值 while (!list.isEmpty()) { //每次取出第一个数值,直到list为空 System.out.print(" " + list.remove(0)); } System.out.println(); } } }结果截图:
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/xionghui2013/article/details/47703543