首页 > 试题广场 >

计算一年中的第几天

[编程题]计算一年中的第几天
  • 热度指数:3329 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解

今年的第几天?

输入年、月、日,计算该天是本年的第几天。


输入描述:
包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。


输出描述:
输入可能有多组测试数据,对于每一组测试数据,
输出一个整数,代表Input中的年、月、日对应本年的第几天。
示例1

输入

1990 9 20
2000 5 1

输出

263
122

Python3

import datetime

while True:
    try:
        y, m, d = map(int, input().split())
        date = datetime.datetime(y, m, d)
        print(date.strftime("%j").lstrip("0"))
    except:
        break

需要注意的是:

  • datetime的参数全为整数。
  • 在输出是第几天时,前面可能带有0,所以要把前面的0去掉。

可以写成一行:

import datetime

while True:
    try:
        print(datetime.datetime(*map(int, input().split())).strftime("%j").lstrip("0"))
    except:
        break
发表于 2019-02-23 09:32:39 回复(0)
import java.util.Scanner;

/**
 * 计算一年中的第几天
 * 今年的第几天?
 * 输入年、月、日,计算该天是本年的第几天。
 * 输入描述:
 * 包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。
 * 输出描述:
 * 输入可能有多组测试数据,对于每一组测试数据,
 * 输出一个整数,代表Input中的年、月、日对应本年的第几天。
 * 输入例子1:
 * 1990 9 20
 * 2000 5 1
 * 输出例子1:
 * 263
 * 122
 *
 * @author shijiacheng
 * @date 2018/2/21
 */
public class DayOfYeafSolution {
    public static void main(String[] args){
        int[] days = {31,28,31,30,31,30,31,31,30,31,30,31};
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()){
            int Y = sc.nextInt();
            int M = sc.nextInt();
            int D = sc.nextInt();

            if (isLeapYear(Y)){
                days[1] = days[1]+1;
            }

            int day = 0;
            for (int i = 1; i < M; i++) {
                day+=days[i-1];
            }
            day +=D;
            System.out.println(day);
        }
    }

    /**
     * 判断是否是闰年
     * @param year
     * @return
     */
    public static boolean isLeapYear(int year){
        if (year%4==0&&year%100!=0){
            return true;
        }else if (year%400==0){
            return true;
        }
        return false;
    }
}
发表于 2018-02-21 15:09:49 回复(0)
先判断闰年后,然后用vector动态创建数组,直接相加就好。
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
    int year, month, day;
    while (cin >> year >> month >> day)
    {
        int count = 0;
        int Feb = 28;
        if (year % 4 == 0 || year % 400 == 0)
        {
            Feb = 29;
        }
        vector<int> monthcount = { 0,31,Feb,31,30,31,30,31,31,30,31,30,31 };
        for (int i = 0; i < month; i++)
        {
            count += monthcount[i];
        }
        count += day;
        cout << count << endl;
    }
    return 0;
}


发表于 2019-04-29 12:02:47 回复(0)
链接:https://www.nowcoder.com/questionTerminal/178aa3dafb144bb8b0445edb5e9b812a
来源:牛客网
知识点:
1.瑞年的判断:若year%400==0 or (year%100!=0)&&(year%4==0),则该年为瑞年,否则为平年。 

C++代码实现:
#include<iostream>
using namespace std;
int days(int year,int month,int day);
int main()
{
    int year,month,day;
    while(cin>>year>>month>>day)
    {
        cout<<days(year,month,day)<<endl;
    }
    return 0;
}
int days(int year,int month,int day)
{
    int month_day[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if((year%400==0)||((year%4==0)&&(year%100!=0))){
        month_day[1]=29;
    }
    int sumday=day;
    for(int i=0;i<month-1;i++)
    {
        sumday+=month_day[i];
    }
    return sumday;
}
发表于 2019-09-09 09:51:19 回复(0)
傻瓜解法

#include <iostream>

using namespace std;

int main()
{
    int d1[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    int d2[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int year,month,day;
    while(cin>>year>>month>>day)
    {
        int num=0;
        if((year % 4 == 0 && year % 100 != 0)||(year%400 ==0))
        {
            for(int i=0;i<month-1;i++)
            {
                num += d1[i];
            }
            num=num+day;
            cout<<num<<endl;
        }
        else
        {
            for(int i=0;i<month-1;i++)
            {
                num += d2[i];
            }
            num=num+day;
            cout<<num<<endl;
        }
    }
    return 0;
}

ps:
请教一下,请看到的大神解答一下,为什么下面这个不行
#include <iostream>   using namespace std;   int main() {     int d1[12]={31,29,31,30,31,30,31,31,30,31,30,31};     int d2[12]={31,28,31,30,31,30,31,31,30,31,30,31};     while(cin)     {         int year,month,day;         int num=0;         cin>>year>>month>>day;         if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)         {             for(int i=0;i<month-1;i++)             {                 num += d1[i];             }             num=num+day;                       }         else         {             for(int i=0;i<month-1;i++)             {                 num += d2[i];             }             num=num+day;         }         cout<<num<<endl;     }     return 0; }

编辑于 2019-05-17 21:32:08 回复(0)
#include <bits/stdc++.h>

using namespace std;

int main()
{     int Y,M,D,d;     int m[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};     while(cin>>Y>>M>>D){         d = D;         for(int i=0;i<M;i++)             d += m[i];         if(Y%4==0 && Y%100!=0 || Y%400==0)             d += 1;         cout<<d<<endl;     }     return 0;
}

发表于 2019-02-17 02:41:09 回复(0)
import java.util.*;
public class Main {
    private static final int[] M_DAYS = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int year = sc.nextInt();
            int month = sc.nextInt();
            int day = sc.nextInt();
            if ( (year % 400 == 0) || (year % 4 == 0 && year % 100 !=0) ) {
                M_DAYS[2] = 29;
            }
            int ans = 0;
            for (int i=1; i<month; i++) {
                ans += M_DAYS[i];
            }
            ans += day;
            System.out.println(ans);
            M_DAYS[2] = 28;
        }
        return;
    }
}
发表于 2019-01-24 17:05:54 回复(0)
import java.util.Scanner;

public class test2 {
    public static void main(String[] args){
        int D=0;
        int [] date={31,28,31,30,31,30,31,31,30,31,30,31};
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入年月日:");
        while(sc.hasNextInt()){
            int year=sc.nextInt();
            int month=sc.nextInt();
            int day=sc.nextInt();
            if(year%400==0||year%100==0){
                date[1]=29;}
            for(int i=0;i<month-1;i++){
            D+=date[i];    }
            System.out.print("该天是本年的第"+(D+day)+"天");
        }    
        
    }

发表于 2018-03-12 16:54:59 回复(0)
#include <stdio.h>
int isRun();

int main() {
    int year,mon,day;
    int days[13] = {0,31,29,31,30,31,30,31,
                    31,30,31,30,31};

    while (scanf("%d%d%d",&year,&mon,&day)!=EOF){
        int total = 0;
       
        if(day > days[mon] ||(isRun(year)==0&&mon==2&&day>28)) {
            printf(" there is no %d days in month %d",day,mon);
            return 0;
        }
        for(int i = 1; i < mon; i++) {
            total += days[i];
        }
        total += day;

        if(mon > 2 && isRun(year) == 0) {
            total -= 1;
        }
        printf("%d\n",total);
    }


}

int isRun(int year) {
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { // 是闰年
        return 1;
    }
    else return 0;
}

发表于 2024-03-26 10:57:44 回复(0)
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Scanner; public class TestDate { public static void main(String[] argvs) throws ParseException {
        Scanner sc=new Scanner(System.in); while(sc.hasNext()){
            String dateStr=sc.nextLine();
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy MM dd");
            Date date= null;
            date=sdf.parse(dateStr);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date); int index=calendar.get(Calendar.DAY_OF_YEAR);
            System.out.println(index);
        }
    }
}
发表于 2020-03-12 09:38:37 回复(0)
使用Date API Calendar SimpleDateFormat 代码量少,好做
发表于 2019-07-28 22:21:56 回复(0)
#include<stdio.h>
#include<iostream>
int main()
{       int year,month,day;
        int sum=0;
        int flag = 0;
        int days = 0;
        scanf("%d %d %d",&year,&month,&day);
        if(year%4==0)
        {
            flag=1;
            if(year%100==0&&year%400==0)
            {flag=1;}else   {flag = 0;}
        }
        for(int i=1;i<month;i++)
        {
            if((1==i)||(3==i)||(5==i)||(7==i)||(8==i)||(10==i)||(12==i))
            {
                days = 31;
                sum = sum +days;
                continue;
            }else if((4==i)||(6==i)||(9==i)||(11==i))
            {
                days = 30;
                sum = sum +days;
                continue;
            }else
                {
                switch (flag)
                {
                case 0:
                    sum=sum+28;  break;
                case 1:
                    sum=sum+29; break;
                default:
                    break;
                }
            }
            sum = sum +day;
    }
            printf("%d\n",sum);
    return 0;
}
初来乍到,新手小白一般写法,请多指教
发表于 2019-06-27 09:23:03 回复(0)

import java.util.Scanner;

public class Ymd {

    Scanner i=new Scanner(System.in);

    int Y=i.nextInt();

    int M=i.nextInt();

    int D=i.nextInt();

    int k;

    public void jisuan() {

        int s;

        if((Y/400)%2==0||(Y/400)%2==1) {

            s=29;

        }

        else {

            s=28;

        }

        k=s+D+(M-2)*30+(M-1)/2;

        System.out.println(k);

    }

public static void main(String[]args) {

    Ymd test=new Ymd();

    test.jisuan();

}

}

发表于 2019-05-27 19:54:18 回复(0)
#include<iostream>

using namespace std;
int num_run[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
int num_norun[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
                 
int main()
{
    int year,month,day;
    while(cin >> year >>month >> day)
    {
        int daynum = 0;
        if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
        {
            for(int i = 0; i < month - 1; ++i)
                daynum += num_run[i];
            daynum += day;
        }
        else{
            for(int i = 0; i < month - 1; ++i)
                daynum += num_norun[i];
            daynum += day;
        }
        cout << daynum << endl;
    }
    
    
}
发表于 2019-05-16 11:03:51 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);    
        while(sc.hasNext()){
            int[] arrs=new int[3];
            for(int i=0;i<3;i++){
                arrs[i]=sc.nextInt();
            }
            System.out.println(findDay(arrs));
        }
    }
    private static int findDay(int[] arrs) {
        int sum=0;
        int n=arrs[1]-1;
        while(n>0){
            if(n==1||n==3||n==5||n==7||n==8||n==10||n==12){
                sum+=31;
            }else if(n==2){
                sum+=isRun(arrs[0])?29:28;
            }else{
                sum+=30;
            }
            n--;
        }
        sum+=arrs[2];
        return sum;
    }
    private static boolean isRun(int i) {
        if(i%400==0){
            return true;
        }
        if(i%4==0&&i%100!=0){
            return true;
        }
        return false;
    }
}

发表于 2019-05-02 20:45:00 回复(0)
#include<stdio.h>
int main(void)
{
    int year = 0, month = 0, day = 0, sum = 0;
    int month_num[] = {31,28,31,30,31,30,31,31,30,31,30,31};
    int i = 0;
    while(scanf("%d%d%d",&year, &month, &day) != EOF)
    {
        for(i=0; i<month-1; i++)
        {
            sum += month_num[i];
        }
        sum += day;
        if(month>=3)
        {
            if(((year%4==0)&&(year%100!=0)) || (year%400==0))
            {
                sum++;
            }
        }
        printf("%d\n",sum);
    }
    
}

发表于 2019-05-02 18:42:19 回复(0)
#include<iostream>
#include<string>
#include<sstream>
#include<queue>
#include<utility>
#include<set>
#include<vector>
#include<map>
#include<stack>
#include<algorithm>
#include<unordered_map>
using namespace std;
int main()
{
    
    int year,month,day;
    while(cin>>year>>month>>day){
         map<int,int> Month;
        Month[1]=31;
        Month[2]=(year%4==0)?29:28;
        Month[3]=31;
        Month[4]=30;
        Month[5]=31;
        Month[6]=30;
        Month[7]=31;
        Month[8]=31;
        Month[9]=30;
        Month[10]=31;
        Month[11]=30;
        Month[12]=31;
        if(1==month){
            cout<<day<<endl;
        }else{
              int cnt=0;
             for(int i=1;i<month;++i){
                cnt+=Month[i];
        }
            cout<<cnt+day<<endl;
        }
       
    }
  return 0;
}




发表于 2019-04-27 09:29:48 回复(0)
 最笨的方法了,楼市几位大佬先创建了需要的数据,然后直接查找使用,我这个写的每次都要执行indexOf,很耗时
                                                                                    
发表于 2019-04-25 16:04:48 回复(0)
#include<iostream>
using namespace std;
int main()
{

    int base[2][12]={{  0, 31, 60, 91,121,152,182,213,244,274,305,335},
                     {  0, 31, 59, 90,120,151,181,212,243,273,304,334}};
    int Y, M, D;
    int flag;
    while(cin >> Y >> M >> D)
    {
        if(((Y%4 == 0)&&(Y%100 != 0))||(Y%400== 0))//闰年
            flag = 0;
        else
            flag = 1;
        cout << base[flag][M-1] + D;
    }
    return 0;
}

发表于 2019-04-09 21:56:24 回复(0)
import java.util.*;
public class Main8{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int Y = input.nextInt();
        int M = input.nextInt();
        int D = input.nextInt();
        int[] Yes = {31,29,31,30,31,30,31,31,30,31,30,31};
        int[] No = {31,28,31,30,31,30,31,31,30,31,30,31};
        int total = 0;
        if((Y%4==0&&Y%100!=0)||Y%400 == 0){
    
            for(int i =0;i<M-1;i++){
                total = total+Yes[i];
                
            }
            total +=D;
            
        }
        else{
            for(int i =0;i<M-1;i++){
                total = total+No[i];
                
            }
            total +=D;
            
            
        }
        System.out.println(total);
    }
}

发表于 2019-03-27 20:03:37 回复(0)