[ad_1]
日付要素を単一の整数に連結し、連結によって形成された数値が 4 または 7 で割り切れるかどうかを確認する必要がある HackerRank 問題を克服しようとしています。 while ループを使用して、次の間の日付を反復処理しています。日付が指定されましたが、私のコードは、開始日が「02-08-2025」、終了日が「04-09-2025」のテストケースの端末に5ではなく8を出力します。 両方の日付が含まれます
私が試したこと:
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 は米国の OS で実行されるため、たとえば日付の米国の規則である「mm/dd/yyyy」を解析する必要がありますが、これは偶然にも例外なくテスト間隔で機能します。
Hacker Rank は、日付を「dd/mm/yyyy」として指定することを明示的に要求します。
結論:
単純に使用する場合 DateTime.Parse
これは、次のようなより具体的な方法を使用する必要があるOS設定を使用します DateTime.ParseExact
ついに使って…
DateTime A = DateTime.ParseExact(date1, "dd-MM-yyyy", null);
…問題は解決するはずです。
私の英語について申し訳ありませんが、お役に立てれば幸いです 😉
[ad_2]
コメント