zoukankan      html  css  js  c++  java
  • 蚂蚁爬行与蚂蚁感冒

    有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。
    木杆很细,只能同时通过一只蚂蚁。
    开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。
    当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走1厘米的距离。
    
    编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间。
    public class Main {
        public static void main(String[] args) {
            /**
             * | | x | | | x | | | x | |半| | | x | | | | | x | | | |
             * 22根棍子,5个X,x表示蚂蚁
             */
            System.out.println("最小时间是:11s");  //离中间最近向左走
            System.out.println("最大时间是:24s");  //最左边向右走
        }
    }




    长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。
    每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。 这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。 【数据格式】 第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。 接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。其中,第一个数据代表的蚂蚁感冒了。 要求输出1个整数,表示最后感冒蚂蚁的数目。 例如,输入: 3 5 -2 8 程序应输出: 1 再例如,输入: 5 -10 8 -20 12 25 程序应输出: 3
    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.Scanner;
    
    public class Main {
        static int count;
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            Integer[] a = new Integer[n];
            int first = 0;
            
            for(int i = 0; i < n; i ++) {
                a[i] = sc.nextInt();
            }
            first = a[0];
            
            Arrays.sort(a, new Comparator<Integer>() {
                @Override
                public int compare(Integer arg0, Integer arg1) {
                    // TODO Auto-generated method stub
                    return Math.abs(arg0) - Math.abs(arg1);
                }
                
            });
            
            int middle = 0;
            for(int i = 0; i < a.length; i ++) {
                if(a[i] == first) {
                    middle = i;
                }
            }
            
            if(a[middle] > 0) {
                for(int i = middle + 1; i < n; i ++) {
                    if(a[i] < 0) {
                        count ++;
                    }
                }
                for(int i = 0; i < middle; i ++) {
                    if(count != 0 && a[i] > 0) {
                        count ++;
                    }
                }
            }
            else {
                for(int i = 0; i < middle; i ++) {
                    if(a[i] > 0) {
                        count ++;
                    }
                }
                for(int i = middle + 1; i < n; i ++) {
                    if(a[i] < 0 && count != 0) {
                        count ++;
                    }
                }
            }
            count ++;
            System.out.println(count);
        }
    }
  • 相关阅读:
    luogu P1833 樱花 看成混合背包
    luogu P1077 摆花 基础记数dp
    luogu P1095 守望者的逃离 经典dp
    Even Subset Sum Problem CodeForces
    Maximum White Subtree CodeForces
    Sleeping Schedule CodeForces
    Bombs CodeForces
    病毒侵袭持续中 HDU
    病毒侵袭 HDU
    Educational Codeforces Round 35 (Rated for Div. 2)
  • 原文地址:https://www.cnblogs.com/jizhidexiaobai/p/8543653.html
Copyright © 2011-2022 走看看