2 条题解

  • 0
    @ 2026-6-5 15:22:16
    using namespace std;
    int main() {
    	char c;
        int a,aa,b,bb,q,t;
        cin>>a>>c>>b;       
        cin>>aa>>c>>bb;
        t = a * 60 + b;    
        q = aa * 60 + bb;  
        
        int diff = t > q ? t - q : q - t; 
        int rev = 1440 - diff;            
    	if(diff < rev){
    		cout<<diff;
    	}else{
    		cout<<rev;
    	}
        
        return 0;
    }
    
    
    • 0
      @ 2025-12-31 15:22:26

      这一题我承认有点坑。

      因为 24:00 等价于 00:0001:60 等价于 02:00。所以这一题更推荐推公式来解决,不知道有没有其他乱七八糟的解法。

      公式其实也比较好推:

      • 由于时间是循环的(24 小时制),我们考虑 24 小时 = 1440 分钟 为一个周期。
      • 然后考虑两段时间的时间差,选择向前或者向后更优者即可

      附带一个小知识点,scanf可以处理这种乱七八糟的输入,详见代码。

      (附:某某教练曾被此题坑点斩于马下,所以大家以后写题一定要认真读题,认真分析性质!)

      #include <iostream>
      #include <algorithm>
      using namespace std;
      
      int main() 
      {
      	int a1,b1,a2,b2;
      	scanf("%d:%d",&a1,&b1);
      	scanf("%d:%d",&a2,&b2);
          int T1=a1*60+b1;
          int T2=a2*60+b2;
          int delta=(T2-T1+1440)%1440;
          int ans=min(delta,1440-delta);
          printf("%d",ans);
          return 0;
      }
      
      • 1

      信息

      ID
      8
      时间
      1000ms
      内存
      256MiB
      难度
      2
      标签
      递交数
      150
      已通过
      39
      上传者