【Java】蚂蚁军队

这篇博客探讨了一支蚂蚁军队在长度为L厘米的横竿上行走的问题。当蚂蚁达到终点或相遇时,它们会改变方向。文章提供了两种不同的解决方案,分别计算了所有蚂蚁掉下竿子的最早和最晚时间。输入包括竿子长度和蚂蚁数量,输出是最早和最晚时间。代码示例使用Java实现,通过比较蚂蚁位置和竿子长度来确定时间范围。
摘要由CSDN通过智能技术生成

Description
一支蚂蚁军队在长度为L厘米的横竿上走,每只蚂蚁的速度恒定,为1厘米/秒。当一只行走的蚂蚁到达模竿终点的时候,它就立即掉了下去;当两只蚂蚁相遇的时候,它们就调头,并开始往相反的方向走。我们知道蚂蚁在模竿上的原来的位置,但不知道蚂蚁行走的方向。请计算所有蚂蚁从模竿上掉下去的最早可能时间和最晚可能的时间。
Input
输入的第1行为样例数。每个样例首先给出2个整数,表示模竿的长度和蚂蚁的数量n。接下来的n个数表示蚂蚁在模竿上的位置(从左开始算起,n<1 000 000)。
Ouput
每个案例输出蚂蚁掉下去的最早时间和最晚时间。
Sample Input

2
10 3
2 6 7
214 7
11 12 7 13 176 23 191

Sample Output

4 8
38 207

思路

       2  6  7
  x    2  6  7(蚂蚁从左边走到终点)
  l-x  8  4  3(蚂蚁从右边走到终点)

两只蚂蚁相遇可以等价于它们继续照各自原本的方向移动
要使所有蚂蚁从模竿上掉下去
最早可能时间是4(2 4 3)——求所有x和l-x中的最小中的最大
最晚可能时间是8(8 6 7)——求所有x和l-x中的最大中的最大

代码


import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
        int t = in.nextInt();
        int l,n;
        int maxt,mint,x;
        while(t-->0) {
            l = in.nextInt();
            n = in.nextInt();
            maxt = Integer.MIN_VALUE;
            mint = Integer.MIN_VALUE;
            for(int i=0;i<n;i++) {
            	x = in.nextInt();
            	maxt = Math.max(maxt, Math.max(x, l-x));
            	mint = Math.max(mint, Math.min(x, l-x));
            }
            System.out.println(mint+" "+maxt);
        }
		in.close();
	}

}

另一种写法


import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int T = in.nextInt();
		while (T-- > 0) {
			int l=in.nextInt();
			int n=in.nextInt();
			int a[]=new int[n];
			int b[]=new int[n*2];
			for(int i=0;i<n;i++){
				a[i]=in.nextInt();
			}
		
			for(int i=0;i<n;i++){
				b[i]=l-a[i];
			}
			
			int k=0;
			for(int i=n;i<n*2;i++){
				b[i]=b[k];
				k++;
				
			}
			for(int i=0;i<n;i++){
				b[i]=a[i];
			}
			Arrays.sort(b);
			System.out.println(b[n-1]+" "+b[2*n-1]);
		}
		in.close();
	}
}

程序在VC++ 6下顺利编译通过。 一、 实验目的: (1) 熟练掌握链栈的基本操作及应用。 (2) 利用链表作为栈的存储结构,设计实现一个求解迷宫的非递归程序。 二、实验内容: 【问题描述】 以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对信任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 【基本要求】 首先实现一个链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。如:对于下列数据的迷宫,输出的一条通路为:(1,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2),……。 【测试数据】 迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口。 1 2 3 4 5 6 7 8 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 0 1 0 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 0 1 0 1 1 1 0 0 0 0 0 0 以方阵形式输出迷宫及其通路。 输出: 请输入迷宫的长和宽:5 5 请输入迷宫内容: 0 1 1 0 0 0 0 1 1 0 1 0 0 1 1 1 0 0 1 0 1 1 0 0 0 迷宫的路径为 括号内的内容分别表示为(行坐标,列坐标,数字化方向,方向) (1,1,1,↓) (2,1,2,→) (2,2,1,↓) (3,2,1,↓) (4,2,2,→) (4,3,1,↓) (5,3,2,→) (5,4,2,→) (5,5,0,) 迷宫路径探索成功!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值