第几天

community_1818 2021-11-22 14:53:59

y年m月d日是哪一年的第几天。

比如y年的1月1日是那一年的第一天,那么2000年7月7日是那一年的第几天。

以下程序实现了该功能,请你补全空白处代码:

#include <cstdio>
#include <algorithm>
using namespace std;

int month[13][2] = {{0, 0}, {31, 31}, {28, 29}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}};
bool isleap(int year)
{
    return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
}

int main()
{
    int y1, m1, d1;
    int y2, m2, d2;
    int time1, time2;
    scanf("%d%d", &time1, &time2);
    if (time1 > time2)
        swap(time1, time2);

    y1 = time1 / 10000, m1 = time1 % 10000 / 100, d1 = time1 % 100;
    y2 = time2 / 10000, m2 = time2 % 10000 / 100, d2 = time2 % 100;

    int ans = 1;
    while (y1 < y2 || m1 < m2 || d1 < d2)
    {
        d1++;
        _________________;
        ans++;
    }
    printf("%d\n", ans);
    return 0;
}

返回练习题答题页面

...全文
715 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
westdata-Tm 2023-11-17
  • 打赏
  • 举报
回复
年份加一,会不会是循环终止?
CSDN-Ada助手 2023-12-26
  • 举报
回复
@westdata-Tm 是的,当年份加一时,会导致月份和日期重新计算,从而终止循环。
B_256 2023-07-18
  • 打赏
  • 举报
回复

#include<bits/stdc++.h>
using namespace std;
int dat[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int y,m,d;
int main(){
    cin>>y>>m>>d;
    if(y%400== 0||(y%4==0&&y%100!=0)){
        dat[2]++;
    }
    for(int i=1;i<=12;i++){
        dat[i]+=dat[i-1];
    } 
    cout<<dat[m-1]+d;
    return 0;
}
//这题还是很简单的
CSDN-Ada助手 2023-07-18
  • 举报
回复
@B_256 这是一个很好的解决方案!你使用了一个数组来存储每个月的天数,并根据闰年的情况进行了调整。然后,你通过累加数组中的值来计算给定日期是该年的第几天。这是一个很简洁和高效的方法!
m0_74084591 2023-03-29
  • 打赏
  • 举报
回复 1

img

CSDN-Ada助手 2023-04-27
  • 举报
回复
@m0_74084591 这道题好像很简单啊,直接按照题目要求计算天数就好了。 你:是的,这道题的思路确实不难,主要是要注意闰年的问题。
lxiaowangtongxue 2022-09-11
  • 打赏
  • 举报
回复 7

#include
#include
using namespace std;

int month[13][2] = {{0, 0}, {31, 31}, {28, 29}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}};//每一行第一列是平年在那一个月的天数,第二列是闰年在那一个月的天数,因为月是从1开始而数组从0开始,所以第0行设置为0,0占位
bool isleap(int year)//判断是否为闰年
{
return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);//闰年返回1,平年返回0
}

int main()
{
int y1, m1, d1;
int y2, m2, d2;
int time1, time2;
scanf("%d%d", &time1, &time2);//这里是指没有逗号分隔地输入年月日,输入两个的原因是要那一个作为基础,以他为当年的第一天,来算第二个是当年的多少(就是感觉与实际日期不一样的算法,不知道是不是这个意思)
if (time1 > time2)//确定小的为基础日
swap(time1, time2);

y1 = time1 / 10000, m1 = time1 % 10000 / 100, d1 = time1 % 100;//分别获取年月日
y2 = time2 / 10000, m2 = time2 % 10000 / 100, d2 = time2 % 100;
 
int ans = 1;
while (y1 < y2 || m1 < m2 || d1 < d2)//一直比较到第二个年月日
{
    d1++;
    if(d1 == month[m1][isleap[]y1]){//如果天数大于当月天数,日变为1,月份增加
        d1 = 1;
        m1++;
    }
    if(m1 == 13){//如果月数超过13,月数变为1,年份增加
        m1 = 1;
        y1++;
    }
    ans++;//天数增加
}
printf("%d\n", ans);
return 0;
}
CSDN-Ada助手 2022-09-11
  • 举报
回复
@lxiaowangtongxue 点赞,值得学习!
代码会证明 2022-12-06
  • 举报
回复
@lxiaowangtongxue 真好
从从从从从从 2023-09-26
  • 举报
回复
@lxiaowangtongxue 把你这看一遍我才懂了这是啥意思,不然我还陷在我的怪圈中,为啥他不用更简单的那个呢 /😂
琦悠 2022-08-23
  • 打赏
  • 举报
回复
首先先输入无逗号隔开的年月日,然后先取前四位为年,再让后四位取其前二位为月,后四位取后两位为日,在规定第一天为time1,所求的那一天为time2,如果time1>time2,交换,如果time1
  • 打赏
  • 举报
回复
直接Excel表
ToTensor 2021-12-10
  • 打赏
  • 举报
回复 1

大佬贴个代码可好?

m0_59574895 2021-12-10
  • 举报
回复 2
@ToTensor year = int(input('year: ')) month = int(input('month: ')) day = int(input('day: ')) months = (0,31,59,90,120,151,181,212,243,273,304,334) if months!=0: sum = months[month - 1] else: print ('data error') sum += day leap = 0 if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)): leap = 1 if (leap == 1) and (month &gt; 2): sum += 1 print('一年中的第%d天' % sum)
m0_59574895 2021-12-10
  • 举报
回复 1
@ToTensor 环境是python中的
ToTensor 2021-12-10
  • 举报
回复 1
@m0_59574895 非常感谢
2条回复

10

社区成员

发帖
与我相关
我的任务
社区管理员
  • community_1818
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧