【解決方法】このコードが 5 ではなく 8 を出力する理由

プログラミングQA


日付要素を単一の整数に連結し、連結によって形成された数値が 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);

…問題は解決するはずです。

私の英語について申し訳ありませんが、お役に立てれば幸いです 😉

コメント

タイトルとURLをコピーしました