一个有趣的#第几天#问题 C++/C/Java

题目描述

给定一个日期,输出这个日期是该年的第几天。

输入
输入数据有多组,第一行输入一个整数n表示样例个数。每组占一行,数据格式为 year / month / day (年 / 月 / 日)组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。

输出
对于每组输入数据,输出一行,表示该日期是该年的第几天。

样例输入

2
1985/1/20
2006/3/12

样例输出

20
71

供参考:

#include<stdio.h>
int H(int y, int m, int d);
int main()
{
    int n, year, month, day;
    scanf("%d", &n);
    while(n--){
        scanf("%d/%d/%d", &year, &month, &day);
        printf("%d", H(year, month, day));
        if (n) printf("\n");
    }
    return 0;
}
int H(int y, int m, int d)
{
    int sum = 0, i;
    for (i = 1; i < m; i++)
    {
        if (i == 2)
        {
            if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
                sum += 29;
            else
                sum += 28;
        }
        else if (i == 4 || i == 6 || i == 9 || i == 11)
            sum += 30;
        else
            sum += 31;
    }
    return sum += d;
}


int main()
{

   int months[] = {0, 31, 28, 31, 20, 31, 20, 31, 31, 30, 31, 30, 31};
   int T, year, month, day, sum;
   scanf("%d", &T);
   while (T--)
   {
      scanf("%d/%d/%d", &year, &month, &day);
      sum = 0;
      for (int i = 1; i < month; i++)
      {
         sum += months[i];
      }

      if (month > 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))
         sum++;

      sum += day;
      printf("%d\n", sum);
   }

   return 0;
}