यह कोड 5 के बजाय 8 आउटपुट क्यों दे रहा है?


मैं एक हैकररैंक समस्या को दूर करने का प्रयास कर रहा हूं, जहां मुझे दिनांक तत्वों को एक पूर्णांक में जोड़ना और यह जांचना आवश्यक है कि संयोजन द्वारा बनाई गई संख्या 4 या 7 से विभाज्य है या नहीं। मैं तारीखों के बीच पुनरावृत्ति करने के लिए थोड़ी देर के लूप का उपयोग कर रहा हूं। तारीखें दी गई हैं, लेकिन मेरा कोड टेस्ट केस के लिए टर्मिनल पर 5 के बजाय 8 प्रिंट कर रहा है, जिसकी आरंभ तिथि “02-08-2025” और समाप्ति तिथि “04-09-2025” है। दोनों तिथियां सम्मिलित हैं

मैंने क्या प्रयास किया है:

सी#
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

मैं हैकर रैंक नहीं जानता, इसलिए मेरे उत्तर में बहुत अधिक धारणाएँ क्यों हैं, इसके लिए क्षमा करें। वैसे. प्रश्न पर टिप्पणियाँ भी देखें।

धारणा: हैकर रैंक यूएस ओएस पर चलता है और इसलिए तारीख के लिए यूएस कन्वेंशन को पार्स करने के लिए उदाहरण लेगा जो कि ‘मिमी/डीडी/वाईय’ है और संयोग से यह बिना किसी अपवाद के आपके परीक्षण अंतराल के साथ काम करता है। यदि आप उदाहरण के लिए ’29-12-2025 31-12-2025′ दर्ज करेंगे तो प्रश्न में आपका वर्तमान कार्यान्वयन एक अपवाद फेंक देगा।

हैकर रैंक स्पष्ट रूप से दिनांक को ‘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

मैं इन पंक्तियों के अनुरूप कुछ करने का सुझाव दूंगा।

सी#
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();

コメント

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