[ad_1]
我正在尝试解决 HackerRank 问题,其中需要将日期元素连接成单个整数,并检查连接形成的数字是否能被 4 或 7 整除。我正在使用 while 循环来迭代给定日期,但我的代码在测试用例的终端上打印 8 而不是 5,开始日期为“02-08-2025”,结束日期为“04-09-2025”。 两个日期均包含在内
我尝试过的:
C#
public class Solution{ static void Main(string args[]){ //read date from the user var input = Console.ReadLine(); var date1 = input.Split(new char[]{' '})[0]; var date2 = input.Split(new char[]{' '})[1]; //Parse date objects out of the strings DateTime A = DateTime.Parse(date1); DateTime B = DateTime.Parse(date2); int lucky = 0; while(A<= B){ //Get a string representation of the date and //replace the hyphens var str = A.ToString("dd-MM-yyyy").Replace("-",""); var i = Int32.Parse(str); if(i%4==0 || i%7 ==0) lucky ++; //Update the day A A = A.AddDays(1); } Console.WriteLine(lucky); } }
解决方案1
我不知道黑客等级,这就是为什么我的答案中有太多假设,对此感到抱歉。 顺便提一句。 另请参阅对该问题的评论。
假设:Hacker Rank 在美国操作系统上运行,因此将采用例如日期来解析美国约定的日期,即“mm/dd/yyyy”,并且碰巧这适用于您的测试间隔,无一例外。 如果您输入“29-12-2025 31-12-2025”,问题中当前的实现将引发异常。
Hacker Rank 明确要求提供“dd/mm/yyyy”格式的日期
结论:
而不是简单地使用 DateTime.Parse
它使用操作系统设置,您需要使用更具体的方法,例如 DateTime.ParseExact
最后使用…
DateTime A = DateTime.ParseExact(date1, "dd-MM-yyyy", null);
DateTime B = DateTime.ParseExact(date2, "dd-MM-yyyy", null);
…应该可以解决你的问题。
笔记:
和 DateTime.TryParseExact
如果输入了无效日期,您可以解析日期而不引发异常。然后您的工作就是在代码中处理这种情况。
我希望它能有所帮助,对我的英语感到抱歉;)
解决方案2
我建议按照这些思路做一些事情。
C#
string[] input = "02-08-2025 04-09-2025".Split(' '); DateTime startDate = DateTime.Parse(input[0]); DateTime endDate = DateTime.Parse(input[1]); int luckyNumberCount = 0; for (DateTime date = startDate; date <= endDate; date = date.AddDays(1)) { var n = int.Parse(date.ToString("dd-MM-yyyy").Replace("-", "")); if (n % 4 == 0 || n % 7 == 0) luckyNumberCount++; } Console.WriteLine(luckyNumberCount); Console.ReadLine();
[ad_2]
コメント