美文网首页
杭电acm1276 士兵队列训练问题

杭电acm1276 士兵队列训练问题

作者: cwhong | 来源:发表于2018-06-28 09:58 被阅读0次

士兵队列训练问题

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 9842 Accepted Submission(s): 4311

Problem Description

某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。
 
Input
本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。
 
Output
共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。
 
Sample Input
2 20 40
 
Sample Output
1 7 19 1 19 37

Code

/**
 * date:2017.11.10
 * author:孟小德
 * function:acm1276
 *  士兵队列问题
 */
 
 
 
import java.util.*;
 
public class acm1276
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
 
        int num = input.nextInt();
        int[] list_size = new int[num];
 
        ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
        for (int i=0;i<num;i++)
        {
            list.add(new ArrayList<Integer>());
            list_size[i] = input.nextInt();
 
        }
 
        for (int i=0;i<num;i++)
        {
            assignment(list.get(i),list_size[i]);
            // list_size[i] = input.nextInt();
 
            ArrayList<Integer> delete_list = new ArrayList<Integer>();
            while (list.get(i).size() > 4)
            {
 
                //士兵1 2 报数
                number_off(list.get(i),delete_list,2);
 
                //士兵出列
                if (delete_list.size() > 0)
                {
                    delete(list.get(i),delete_list);
                }
 
                delete_list.clear();
 
                //士兵1 2 3 报数
                if (list.get(i).size() > 4)
                {
                    number_off(list.get(i),delete_list,3);
                }
                else
                {
                    break;
                }
 
                // 士兵出列
                if (delete_list.size() > 0)
                {
                    delete(list.get(i),delete_list);
                }
 
                delete_list.clear();
            }
        }
 
        for (int i=0;i<num;i++)
        {
            if (list.get(i).size() == 2)
            {
                System.out.print(list.get(i).get(1));
 
            }
            else if (list.get(i).size() > 2)
            {
                System.out.print(list.get(i).get(1));
                for (int j=2;j<list.get(i).size();j++)
                {
                    System.out.print(" " + list.get(i).get(j));
                }
 
            }
            System.out.println();
        }
 
 
    }
 
    //给list列表赋值下标与值对应,第一个赋值为0
    public static void assignment(ArrayList<Integer> list,int list_size)
    {
        for (int i=0;i<=list_size;i++)
        {
            list.add(i);
        }
    }
 
    //士兵出列
    public static void delete(ArrayList<Integer> list,ArrayList<Integer> delete_list)
    {
        for (int i=delete_list.size()-1;i>=0;i--)
        {
            int n = delete_list.get(i);
            list.remove(n);
            // System.out.println(delete_list.get(i) + " " + list.size());
 
        }
    }
 
    //士兵报数
    public static void number_off(ArrayList<Integer> list,
        ArrayList<Integer> delete_list,int n)
    {
        for (int i = 1;i<list.size();i++)
        {
            if (i%n == 0)
            {
                delete_list.add(i);
            }
        }
    }
}

相关文章

  • 杭电acm1276 士兵队列训练问题

    士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others) Memory...

  • ACM 之 A - 士兵队列训练问题(更新版)

    Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头...

  • 杭电oj 1052田忌赛马问题

    http://acm.hdu.edu.cn/showproblem.php?pid=1052 问题描述 这是中国历...

  • 杭电助手

    杭电助手(服务号hduhelp,订阅号hduhelper)是隶属于杭州电子科技大学党委学工部的校级组织,我们有前端...

  • 杭电2015

    这道题看起来不复杂,但做起来还是挺费工夫的。里面要用很多的循环结构,很容易在些小地方出错。我就是因为那些小问题而搞...

  • 杭电打卡

    这题主要是数学方法求解,其他没什么难度,关键是得出递推公式。 假如第一个和最后一个格子能相同颜色,我们可以很快算出...

  • 杭电oj 第11页 java版答案

    杭电oj 第2000- 2099 题 全答案杭电oj 第十一页答案 具体路径在 src/main/java/com...

  • 杭电ACM1001

    不再更新,杭电ACM的题转到csdn博客

  • 杭电ACM(1013)

  • 二零一七杭电赏梅

    西邻专司花千尊, 东毗惟和草万匀, 纷落梅卿诱草生, 葱绿淡粉妆美人。

网友评论

      本文标题:杭电acm1276 士兵队列训练问题

      本文链接:https://www.haomeiwen.com/subject/uxzwyftx.html