博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法笔记_175:历届试题 蚂蚁感冒(Java)
阅读量:6852 次
发布时间:2019-06-26

本文共 2756 字,大约阅读时间需要 9 分钟。

目录

 


1 问题描述

问题描述
  长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

 

 


2 解决方案

 

具体代码如下:

 

import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.Scanner;public class Main {    public static int n;    public static ArrayList
num; public static int count = 1; static class point { public int position; public int id; public point(int position, int id) { this.position = position; this.id = id; } } class MyComparator implements Comparator
{ public int compare(point arg0, point arg1) { int a = Math.abs(arg0.position); int b = Math.abs(arg1.position); if(a > b) return 1; else if(a < b) return -1; return 0; } } public void getResult() { int judge = num.get(0).position; Collections.sort(num, new MyComparator()); int mid = 0; for(int i = 0;i < num.size();i++) { if(num.get(i).id == 0) { mid = i; break; } } int leftMin = 0, leftMax = 0, rightMin = 0, rightMax = 0; for(int i = 0;i < mid;i++) { if(num.get(i).position < 0) leftMin++; else if(num.get(i).position > 0) leftMax++; } for(int i = mid + 1;i < n;i++) { if(num.get(i).position < 0) rightMin++; else if(num.get(i).position > 0) rightMax++; } for(int i = 0;i < mid;i++) { if(judge > 0 && rightMin > 0 && num.get(i).position > 0) count++; else if(judge < 0 && num.get(i).position > 0) count++; } for(int i = mid + 1;i < n;i++) { if(judge > 0 && num.get(i).position < 0) count++; else if(judge < 0 && leftMax > 0 && num.get(i).position < 0) count++; } } public static void main(String[] args) { Main test = new Main(); Scanner in = new Scanner(System.in); n = in.nextInt(); num = new ArrayList
(); for(int i = 0;i < n;i++) { int a = in.nextInt(); num.add(new point(a, i)); } test.getResult(); System.out.println(count); }}

 

转载地址:http://hiyyl.baihongyu.com/

你可能感兴趣的文章
好看的Ubuntu&Linux命令提示符
查看>>
我的友情链接
查看>>
Apache开启https
查看>>
jdk8-获取list<Object>中的某个属性并过滤非空,然后返回一个属性的list
查看>>
ajax跨域方法
查看>>
在AIX上配置NIM以及nim的mksysb备份
查看>>
我的友情链接
查看>>
LVS+Keepalived+nginx+单纯keepalived高可用
查看>>
6752/6732平台使用512MB RAM时 Camera配置方法
查看>>
AVAudioPlayer音频播放器—IOS开发
查看>>
oracle 查询的结果自动换行
查看>>
交换机xmodem灌IOS
查看>>
KeyMob聚合 我是最稳定的
查看>>
css中display的属性值---block VS inline(none就不用显示了)
查看>>
mongodb里日期类型的时区问题
查看>>
CentOS7 部署docker
查看>>
我的友情链接
查看>>
001:操作系统概述
查看>>
6:多源复制的实现
查看>>
amMap地理的统计图表
查看>>