在给定的24小时制时间中替换‘_’以最大化时间


在给定的24小时制时间格式中用数字替换‘_’以最大化时间是一个涉及计算通过替换24小时制时间格式中缺失的数字来获得最大可能时间的问题。任务是通过用任何数字替换字符“_”来找到最大可能的时间。在本教程中,我们将讨论如何使用C++编程语言解决这个问题。我们将逐步解释用于计算最大可能时间的算法,以及实现该算法的C++代码。

此外,我们将包含测试示例来说明问题及其解决方案,以及对测试示例的解释。在本教程结束时,读者将更好地理解如何使用C++解决这个问题,并将能够运用这些知识来解决未来的类似问题。让我们开始吧!

问题陈述

目标是通过替换字符串S中用‘_’标记的位置上的任何数字来确定最大可能的时间,其中S代表24小时制时间格式。

示例1

输入

S = "23:4_"

输出

"23:49"

解释 − 在给定的输入字符串中,将第三个字符替换为'9'以获得最大可能的时间。因此,输出为“23:49”。

示例2

输入

S = "1_:22"

输出

"19:22"

解释 − 在给定的输入字符串中,将第一个字符替换为'1'以获得24小时制格式中的最大可能小时数。因此,输出为“19:22”。

注意 − 在两个示例中,输入字符串S都代表24小时制时间格式,其中缺失的数字用'_'表示。目标是用任何数字替换缺失的数字以获得最大可能的时间。第一个示例演示了如何替换分钟位上的第二个数字以获得最大时间。第二个示例显示了如何替换小时位上的第一个数字以获得24小时制格式中的最大小时数。

算法

  • 步骤1 − 从用户处获取输入字符串S。

  • 步骤2 − 将最大小时值和分钟值分别初始化为23和59。

  • 步骤3 − 如果分钟位上的第二位数字缺失,则将其替换为'9'。

  • 步骤4 − 如果小时位上的第一位数字缺失

    • 如果第二位数字小于'4',则将其替换为'9'。

    • 否则,将其替换为'3'。

  • 步骤5 − 如果小时位上的第二位数字缺失

    • 如果第一位数字小于'2'或也缺失,则将其替换为'2'。

    • 否则,将其替换为'1'。

  • 步骤6 − 输出最大可能的时间。

示例

以下是实现上述算法的程序:

在下面的程序中,替换给定时间中的缺失数字以找到最大可能的时间。程序检查并用'9'替换分钟位上缺失的第二位数字。然后,它通过在第二位数字小于'4'时用'2'替换它,否则用'1'替换它来处理小时位上缺失的第一位数字。最后,如果小时位上的第二位数字缺失,则如果第一位数字小于'2',则用'3'替换它,否则用'2'替换它。程序根据所做的替换输出最大可能的时间。

#include <stdio.h>
#include <string.h>

int main() {
   char S[] = "1_:22";
   printf("Given time with missing digits: %s\n", S);
   // Initialize the maximum hour and minute values
   int maxHour = 23;
   int maxMinute = 59;
   // If the second digit in the minute's place is missing, replace it with '9'
   if (S[4] == '_') {
      S[4] = '9';
   }
   // If the first digit in the hour's place is missing, replace it with '2' if the second digit is less than '4',
   // otherwise replace it with '1'
   if (S[1] == '_') {
      if (S[0] < '2') {
         S[1] = '9';
      } else {
         S[1] = '3';
      }
   }
   // If the second digit in the hour's place is missing, replace it with '3' if the first digit is less than '2',
   // otherwise replace it with '2'
   if (S[0] == '_') {
      if (S[1] < '4' || S[1] == '_') {
         S[0] = '2';
      } else {
         S[0] = '1';
      }
   }
   // Output the maximum possible time
   printf("The maximum possible time is: %s\n", S);
   return 0;
}

输出

Given time with missing digits: 1_:22
The maximum possible time is: 19:22
#include <iostream>
#include <algorithm>
int main() {
   std::string S = "1_:22";
   std::cout << "Given time with missing digits: " << S << std::endl;
   // Initialize the maximum hour and minute values
   int maxHour = 23;
   int maxMinute = 59;
   // If the second digit in the minute's place is missing, replace it with '9'
   if (S[4] == '_') {
      S[4] = '9';
   }
   // If the first digit in the hour's place is missing, replace it with '2' if the second digit is less than '4',
   // otherwise replace it with '1'
   if (S[1] == '_') {
      if (S[0] < '2') {
         S[1] = '9';
      } else {
         S[1] = '3';
      }
   }
   // If the second digit in the hour's place is missing, replace it with '3' if the first digit is less than '2',
   // otherwise replace it with '2'
   if (S[0] == '_') {
      if (S[1] < '4' || S[1] == '_') {
         S[0] = '2';
      } else {
         S[0] = '1';
      }
   }
   // Output the maximum possible time
   std::cout << "The maximum possible time is: " << S << std::endl;
   return 0;
}

输出

Given time with missing digits: 1_:22
The maximum possible time is: 19:22
public class MaximumTime {
   public static String calculateMaximumTime(String S) {
      // Initialize the maximum hour and minute values
      int maxHour = 23;
      int maxMinute = 59;

      char[] chars = S.toCharArray();

      // If the second digit in the minute's place is missing, replace it with '9'
      if (chars[4] == '_') {
         chars[4] = '9';
      }

      // If the first digit in the hour's place is missing, replace it with '2' if the second digit is less than '4',
      // otherwise replace it with '1'
      if (chars[1] == '_') {
         if (chars[0] < '2') {
            chars[1] = '9';
         } else {
            chars[1] = '3';
         }
      }

      // If the second digit in the hour's place is missing, replace it with '3' if the first digit is less than '2',
      // otherwise replace it with '2'
      if (chars[0] == '_') {
         if (chars[1] < '4' || chars[1] == '_') {
            chars[0] = '2';
         } else {
            chars[0] = '1';
         }
      }

      // Convert the character array back to a string
      return new String(chars);
   }

   public static void main(String[] args) {
      String inputStr = "1_:22";
      System.out.println("Given time with missing digits: " + inputStr);
      String result = calculateMaximumTime(inputStr);
      System.out.println("The maximum possible time is: " + result);
   }
}

输出

Given time with missing digits: 1_:22
The maximum possible time is: 19:22
def calculate_maximum_time(S):
   # Initialize the maximum hour and minute values
   max_hour = 23
   max_minute = 59
    
   # If the second digit in the minute's place is missing, replace it with '9'
   S = list(S)
   if S[4] == '_':
      S[4] = '9'
    
   # If the first digit in the hour's place is missing, replace it with '2' if the second digit is less than '4',
   # otherwise replace it with '1'
   if S[1] == '_':
      if S[0] < '2':
         S[1] = '9'
      else:
         S[1] = '3'
    
   # If the second digit in the hour's place is missing, replace it with '3' if the first digit is less than '2',
   # otherwise replace it with '2'
   if S[0] == '_':
      if S[1] < '4' or S[1] == '_':
         S[0] = '2'
      else:
         S[0] = '1'
    
   # Convert the list back to a string
   result = ''.join(S)
   return result

input_str = "1_:22"
print("Given time with missing digits:", input_str)
result = calculate_maximum_time(input_str)
print("The maximum possible time is:", result)

输出

Given time with missing digits: 1_:22
The maximum possible time is: 19:22

结论

总而言之,通过替换给定24小时制时间格式中的'_'来最大化时间的问题,可以使用本教程中提供的算法和C++代码轻松解决。通过遵循分步方法并理解算法背后的逻辑,读者可以获得宝贵的见解,从而解决类似的问题。借助测试示例,读者可以验证代码的正确性,并增强其编程技能的信心。

更新于:2023年10月23日

浏览量:132

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.