牛客算法入门25-ranko的手表

描述

ranko 的手表坏了,正常应该显示 xx:xx 的形式(4 个数字),比如下午 1 点半应该显示 13:30 ,但现在经常会有一些数字有概率无法显示。
ranko 在  t_1t1​ 时刻看了下时间,过了一段时间在 t_2t2​ 时刻看了下时间。她想知道, t_1t1​ 和 t_2t2​ 这两个时刻之间相距的时间的最大值和最小值是多少?
保证 t_1t1​ 在 t_2t2​ 之前(且 t_1t1​ 和 t_2t2​ 不等)。t_1t1​和 t_2t2​在同一天的 00:00 到 23:59 之间。

输入描述:

两行输入两个时间,为 xx:xx 的形式。其中 xx 为数字或者字符 '?' ,问号代表这个数字没有显示。
保证输入是合法的。

输出描述:

一行输出两个整数,分别代表 t_1t1​ 和 t_2t2​ 相距时间的最小值和最大值(单位分钟)。

示例1

输入:

18:0?
2?:1?

复制输出:

121 319

复制说明:

相距最小的时间为 18:09 到 20:10 ,相距121分钟。
相距最大的时间为 18:00 到 23:19 ,相距319分钟。

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String s1=sc.nextLine();
        String s2=sc.nextLine();
        
       System.out.println(min(s1,s2)+" "+max(s1,s2));
	}
	public static int max(String s1,String s2)
	{
		char[] c1=s1.toCharArray();
		char[] c2=s2.toCharArray();
		//分别装入map
		Map<Integer,Integer> m=new HashMap<>();
		Map<Integer,Integer> m2=new HashMap<>();
		
		for (int i=0;i<c1.length;i++)
		{
			if (c1[i]>='0'&&c1[i]<='9')
			{
				m.put(i+1,Integer.parseInt(c1[i]+""));
			}
		}
		//System.out.println("m:"+m.toString());
		for (int i=0;i<c2.length;i++)
		{
			if (c2[i]>='0'&&c2[i]<='9')
			{
				m2.put(i+1,Integer.parseInt(c2[i]+""));
			}
		}
	//	System.out.println("m2:"+m2.toString());
				
		//添加缺少的数
		for (int i=1;i<=5;i++)
		{
			if (i!=3&&!m.containsKey(i))
			{
				m.put(i, 0);
			}
		}
		
		if (!m2.containsKey(1))
		{
			m2.put(1,2);
		}
		if (!m2.containsKey(2))
		{
			if (m2.get(1)==2)
			{
				m2.put(2, 3);
			}
			else
			{
				m2.put(2, 9);
			}
		}
		if (!m2.containsKey(4))
		{
			m2.put(4,5);
		}
		if (!m2.containsKey(5))
		{
			m2.put(5,9);
		}
		//System.out.println("m:"+m.toString());
		//System.out.println("m2:"+m2.toString());
		
		int number1=0,number2=0;
		number1=60*(m.get(1)*10+m.get(2))+m.get(4)*10+m.get(5);
		number2=60*(m2.get(1)*10+m2.get(2))+m2.get(4)*10+m2.get(5);
		return number2-number1;
		
	}
	public static int min(String s1,String s2)
	{
		char[] c1=s1.toCharArray();
		char[] c2=s2.toCharArray();
		//分别装入map
		Map<Integer,Integer> m=new HashMap<>();
		Map<Integer,Integer> m2=new HashMap<>();
		
		for (int i=0;i<c1.length;i++)
		{
			if (c1[i]>='0'&&c1[i]<='9')
			{
				m.put(i+1,Integer.parseInt(c1[i]+""));
			}
		}
		//System.out.println("m:"+m.toString());
		for (int i=0;i<c2.length;i++)
		{
			if (c2[i]>='0'&&c2[i]<='9')
			{
				m2.put(i+1,Integer.parseInt(c2[i]+""));
			}
		}
	//	System.out.println("m2:"+m2.toString());
		//第一位
		if (!m.containsKey(1)&&m2.containsKey(1))
		{
			if (m.containsKey(2)&&m2.containsKey(2)&&m.get(2)>=m2.get(2))
			{
				
				m.put(1, m2.get(1)-1);
			}
			else
			{
			m.put(1, m2.get(1));
			}
		}
		if (!m2.containsKey(1)&&m.containsKey(1))
		{
			if (m.containsKey(2)&&m2.containsKey(2)&&m.get(2)>=m2.get(2))
			{
				
				m2.put(1, m.get(1)+1);
			}
			else
			{
			m2.put(1, m.get(1));
			}
		}
		if (!m.containsKey(1)&&!m2.containsKey(1))
		{
			if (m.containsKey(2)&&m2.containsKey(2)&&m.get(2)>=m2.get(2))
			{
				m.put(1, 0);
				m2.put(1, 1);
			}
			else 
			{
			m.put(1,0);
			m2.put(1, 0);
			}
		}
		//第二位
		if (!m.containsKey(2)&&m2.containsKey(2))
		{
			if (m.get(1)==m2.get(1)&&m.containsKey(4)&&m2.containsKey(4)&&m.get(4)>=m2.get(4))
			{
				m.put(2, m2.get(2)-1);
			}
			else if (m.get(1)==m2.get(1))
		{
			m.put(2, m2.get(2));
		}
		else
		{
			m.put(2, 9);
		}
		}
		
		if (!m2.containsKey(2)&&m.containsKey(2))
		{
			if (m.get(1)==m2.get(1)&&m.containsKey(4)&&m2.containsKey(4)&&m.get(4)>=m2.get(4))
			{
				m2.put(2, m.get(2)+1);
			}
			else if (m.get(1)==m2.get(1))
		{
			m2.put(2, m.get(2));
		}
		else
		{
			m2.put(2, 0);
		}
		}
		
		if (!m.containsKey(2)&&!m2.containsKey(2))
		{
			
			if (m.get(1)==m2.get(1)&&m.containsKey(4)&&m2.containsKey(4)&&m.get(4)>=m2.get(4))
			{
				m.put(2, 0);
				m2.put(2, 1);
			}
			else if (m.get(1)==m2.get(1))
		{
			m.put(2, 0);
			m2.put(2, 0);
		}
		else
		{
			m.put(2, 9);
			m2.put(2, 0);
		}
		}
		//第三位
		if (!m.containsKey(4)&&m2.containsKey(4))
		{
			if (m.get(1)==m2.get(1)&&m.get(2)==m2.get(2)&&m.containsKey(5)&&m2.containsKey(5)&&m.get(5)>=m2.get(5))
			{
				m.put(4, m2.get(4)-1);
			} else if (m.get(1)==m2.get(1)&&m.get(2)==m2.get(2))
			{
				m.put(4, m2.get(4));
			}
			else
			{
				m.put(4, 5);
			}
		}
		
		if (!m2.containsKey(4)&&m.containsKey(4))
		{
			if (m.get(1)==m2.get(1)&&m.get(2)==m2.get(2)&&m.containsKey(5)&&m2.containsKey(5)&&m.get(5)>=m2.get(5))
			{
				m2.put(4, m.get(4)+1);
			}
			else if (m.get(1)==m2.get(1)&&m.get(2)==m2.get(2))
		{
			m2.put(4, m.get(4));
		}
		else
		{
			m2.put(4, 0);
		}
		}
		
		if (!m.containsKey(4)&&!m2.containsKey(4))
		{
			if (m.get(1)==m2.get(1)&&m.get(2)==m2.get(2)&&m.containsKey(5)&&m2.containsKey(5)&&m.get(5)>=m2.get(5))
			{
				m.put(4, 0);
				m2.put(4, 1);
			}
			else if (m.get(1)==m2.get(1)&&m.get(2)==m2.get(2))
		{
			m.put(4, 0);
			m2.put(4, 0);
		}
		else
		{
			m.put(4, 5);
			m2.put(4, 0);
		}
		}
		//第四位
		if (!m.containsKey(5)&&m2.containsKey(5))
		{
			if (m.get(1)==m2.get(1)&&m.get(2)==m2.get(2)&&m.get(4)==m2.get(4))
			{
				m.put(5, m2.get(5)-1);
			}
			else
			{
				m.put(5, 9);
			}
		}
		
		if (!m2.containsKey(5)&&m.containsKey(5))
		{
			if (m.get(1)==m2.get(1)&&m.get(2)==m2.get(2)&&m.get(4)==m2.get(4))
			{
				m2.put(5, m.get(5)+1);
			}
			else
			{
				m2.put(5, 0);
			}
		}
		
		if (!m.containsKey(5)&&!m2.containsKey(5))
		{
		if (m.get(1)==m2.get(1)&&m.get(2)==m2.get(2)&&m.get(4)==m2.get(4))
		{
			m.put(5, 0);
			m2.put(5, 1);
		}
		else
		{
			m.put(5, 9);
			m2.put(5, 0);
		}
		}
		//System.out.println("m:"+m.toString());
		//System.out.println("m2:"+m2.toString());
		
		int number1=0,number2=0;
		number1=60*(m.get(1)*10+m.get(2))+m.get(4)*10+m.get(5);
		number2=60*(m2.get(1)*10+m2.get(2))+m2.get(4)*10+m2.get(5);
		return number2-number1;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值