راه حل کد روز روز سال


سطح دشواری ساده
اغلب در ZScaler
ریاضی

بیان مسأله

در مسئله "روز سال" به ما داده می شود رشته که حاوی تاریخی با قالب YYYY-MM-DD است. وظیفه ما بازگرداندن شماره روز آن تاریخ است.

اگر تاریخ داده شده 2020-01-05 باشد. این پنجم ژانویه 5 است که پنجمین روز سال 2020 است. بنابراین ، ما 5 برمی گردانیم.

مثال

date = "2019-01-09"
9

شرح:

 

همانطور که در مثال داده شده است ، روز داده شده 9 ژانویه 2019 است. که روز نهم سال 9 است. بنابراین پاسخ 2019 است.

رویکرد برای راه حل کد روز

همانطور که ورودی در قالب رشته داده می شود ، ما باید تاریخ ، ماه و سال را از رشته در نوع داده صحیح استخراج کنیم. بنابراین ، رشته را تقسیم کرده و تاریخ ، ماه و سال را از آن استخراج خواهیم کرد.

همانطور که هر ماه تعداد متفاوتی از تعداد روزها را دارد. بنابراین برای پیگیری تعداد روزهای هر ماه از یک آرایه استفاده خواهیم کرد و تعداد روزهای هر ماه را ذخیره خواهیم کرد.

اکنون باید تعداد روزهای ماه فوریه را کنترل کنیم زیرا برای سال کبیسه 29 روز و برای یک سال غیر کبیسه 28 روز دارد.

یک سال یک سال کبیسه است:

  1. اگر بر 400 قابل تقسیم باشد
  2. قابل تقسیم بر 4 است اما بر 100 قابل تقسیم نیست.

راه حل کد روز روز سال

برای محاسبه روز سال کافیست تمام تعداد روزهای هر ماه از ژانویه تا ماه داده شده را جمع کنید. تعداد روزهای تاریخ داده شده را اضافه کنید. با این کار روز سال برای تاریخ داده شده تعیین می شود.

پیاده سازی

کد ++ C برای روز سال

#include <bits/stdc++.h> 
using namespace std; 
int dayOfYear(string dt) {
  int days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  int y = stoi(dt.substr(0, 4)), m = stoi(dt.substr(5, 2)), d = stoi(dt.substr(8));
  if (m > 2 && y % 4 == 0 && (y % 100 != 0|| y % 400 == 0)) ++d; 
  while (--m > 0) d += days[m - 1];
  return d;
}
int main() 
{ 
 string date="2019-01-09";
 int ans=dayOfYear(date);
 cout<<ans<<endl;
 return 0;
}
9

کد جاوا برای روز سال

import java.util.Arrays;
import java.util.Set ;
import java.util.HashSet;
public class Tutorialcup {
    public static int dayOfYear(String S) {
        int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        String[] s = S.split("-");
        int y = Integer.parseInt(s[0]);
        int m = Integer.parseInt(s[1]);
        int d = Integer.parseInt(s[2]);
        if (m > 2 && y % 4 == 0 && (y % 100 != 0|| y % 400 == 0)) ++d; 
        while (--m > 0) d += days[m - 1];
        return d;
    } 
  public static void main(String[] args) {
         String date="2019-01-09";
         int ans=dayOfYear(date);
        System.out.println(ans);
  }
}
9

تجزیه و تحلیل پیچیدگی محلول کد کد روز سال

پیچیدگی زمانی

پیچیدگی زمانی کد فوق است O (1).

پیچیدگی فضا

پیچیدگی فضایی کد فوق است O (1).

منابع