杭电ACM 2005: 第几天?

杭州电子科技大学 acm 答案 代码 1001到1005都有,最权威的答案,都可以ac哦 立即下载

原题回顾

Problem Description

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

Input

输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。

Output

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

Sample Input

1985/1/20
2006/3/12

Sample Output

20
71
下面我先贴出我的AC代码,然后在对其中做详细分析:

#include <iostream>
#include<string.h>
#include<stdlib.h>

using namespace std;

int main(void)
{
    char year[5],month[3],day[3],input_str[11];//用来存储输入的字符
    int flag=0,k=-1,j=-1;
    int int_year,int_month,int_day,sum_day=0;//用来存储整型数据
    //闰年、平年各月的天数
    int leap_month_day[]= {31,29,31,30,31,30,31,31,30,31,30,31},no_leap_day[]= {31,28,31,30,31,30,31,31,30,31,30,31};;

    //cin>>input_str这一句必须放在while判断条件里,否则会出现Output Limit Exceeded
    while(cin>>input_str)
    {
        //必须对char数组初始化,否则后面会出错
        memset(year,0,sizeof(char)*5);
        memset(month,0,sizeof(char)*3);
        memset(day,0,sizeof(char)*3);

        for(int i=0; i<strlen(input_str); i++)
        {
            if(i<4)
            {
                //取出输入字符的年份
                year[i]=input_str[i];
                continue;
            }

            if(input_str[i]=='/')
            {
                ++flag;
                continue;
            }

            if(flag==1)//flag用来判断字符'/'
            {
                //取出输入字符的月份
                month[++k]=input_str[i];
            }
            if(flag==2)
            {
                //取出输入字符的天数
                day[++j]=input_str[i];
            }
        }
        //char数组转化为int
        int_year=atoi(year);
        int_month=atoi(month);
        int_day=atoi(day);
        //根据闰年、平年计算总天数
        if(int_year%4==0&&int_year%100!=0||int_year%400==0)
        {
            //注意:这是计算到month的前一个月,然后再加上day就是总天数
            for(int h=0; h<int_month-1; h++)
            {
                sum_day+=leap_month_day[h];
            }
            sum_day+=int_day;
        }
        else
        {
            for(int h=0; h<int_month-1; h++)
            {
                sum_day+=no_leap_day[h];
            }
            sum_day+=int_day;
        }

        //输出结果
        cout<<sum_day<<endl;
        //必须重新初始化
        sum_day=0;
        flag=0;
        k=-1;
        j=-1;

    }
    return 0;
}

总的来说这道题是有点小难度的,涉及到字符串的提取。对于闰年的判断这个不是很难。首先来看一个一个函数memset();memset是计算机中C/C++语言函数。将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。
函数原型:

void *memset(void *s, int ch, size_t n);

函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s

memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。
我在这里为什么会用到初始化操作,因为主要是在输入月份的时候有时候是输入单个数例如2,有时候会输入两个数例如20,当我们输入单个数时,就会有多申请的内存,某些编译器分配空间时,内存中默认值并不为0,在cout时候回出现乱码。这是一个要注意的地方。需要包含头文件 string.h,在这里要注意头文件string.h和头文件string的区别,不懂的话可以百度。

另一个函数就是atoi(),他是把字符串转换成长整型数的一个函数。
函数原型为:

int atoi(const char *nptr);

参数nptr字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。否则,返回零。包含在头文件stdlib.h中。

还有一个细节问题就是cin>>input_str必须放在while()判断条件里。在上述代码已有提示,其实在输入时要做判断输入的处理的,如果没有的话,提交时候会出现Output Limit Exceeded。

主要就是上面几个难点,有疑问的请留言。

从ViT到CLIP:OpenAI如何用4亿张图‘教会’AI看懂世界?一次讲透对比学习与Prompt工程 本文深入解析OpenAI的CLIP模型如何通过4亿图文对的对比学习实现跨模态理解,详细探讨了对比学习、数据构建、模型架构及Prompt工程等核心技术。CLIP利用Transformer架构和精心设计的Prompt模板,在Zero-Shot分类、图像检索等场景展现出强大能力,为多模态AI应用开辟新方向。 阅读详情

相关推荐

双模音频解码器设计:USB+蓝牙LDAC平衡输出方案

音频解码器是数字音频系统中实现数模转换的核心组件,其性能直接决定音质保真度与系统延迟。基于高集成SoC的解码方案通过统一时钟域与片内DSP处理,有效抑制Jitter并简化硬件拓扑;结合全平衡模拟输出架构,可显著提升共模抑制比(CMRR)与信噪比(SNR)。该技术路径广泛应用于便携式Hi-Res音频设备、USB-C小尾巴DAC及蓝牙高解析耳机放大器等场景。本文围绕ES9038Q2M双模SoC展开,详解其在LDAC协议支持、UAC2.0兼容性及平衡电流型DAC输出方面的工程实现,为高性能、可量产音频硬件开发提供

weixin_42613018的博客 388

给定一个日期,输出这个日期是该年的第几天。输入数据有多组,每组占一行,数据格式为 YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。

#include using namespace std; int main() { int a[100],x,y,z,i,m; char e,f;       a[1]=31,a[2]=28,a[3]=31,a[4]=30,a[5]=31,a[6]=30,a[7]=31,a[8]=31,a[9]=30,a[10]=31,a[11]=30,a[12]=31; while(cin>>

acm_Mercyking的博客 2万+

关于使用CMT2300A FIFO缓存区间设置为64Byte的问题

帮助你解决在使用CMT2300A 时遇到的各种问题,若有需要,请及时与我交流

teleger的博客 1429

周赛3

问题: 给定一个日期,输出这个日期是该年的第几天。 Input 输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。 Output 对于每组输入数据,输出一行,表示该日期是该年的第几天。 分析:最主要要知道判断闰年的条件,先定义a[1]=28,如果是闰年就加一,否则就不加。 #include&lt;iostr...

weixin_43792166的博客 163

【华为OD机试真题 2025双机位A卷】958、 高效的任务规划 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 2025双机位A卷】958、 高效的任务规划 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,

KJ.JK 1074

解锁RK3588 HDMI输出:分辨率与EDID的深度探索

本文详细探讨了瑞芯微RK3588处理器的HDMI输出分辨率配置与EDID解析技术。文章首先介绍了RK3588处理器的性能特点及其HDMI功能在多媒体和工业领域的应用价值,随后分别阐述了HDMI输出分辨率的硬件连接要求和软件配置方法,包括4K/8K等不同分辨率的配置实例。在EDID部分,深入解析了EDID的数据结构、交互机制,以及数据获取与修改的具体方法。最后总结了配置过程中常见问题的解决方案,并展望了RK3588在高分辨率显示领域的发展前景。全文为开发者提供了RK3588 HDMI显示配置的完整技术指南。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 592

oj网站的训练题:输入两个数A,B,输出A+B的值(标准题解)

题目描述: 输入两个数A,B,输出A+B的值。 输入: 多组数据:每组由两个整数(a和b)构成,a和b之间用空格隔开,每组输入单独占一行。 当输入为00时,输入结束。0 0这组数据不处理。 输出: 对于每一组测试用例,输出齐对应的和,每组数据一行。 样例输入: 1 2 3 4 10 20 0 0 样例输出

一个程序猿的修炼之路 1万+

拼多多小球直径轨迹重合验证码识别

本文分析了拼多多新型验证码的实现原理与破解思路。该验证码采用Canvas绘制小球弹跳轨迹验证,主要难点在于参数还原和轨迹计算。作者通过逆向工程提取了包括弹跳段数、振幅、旋转参数等关键配置(存储在config.json),并利用Python成功模拟了验证过程。核心算法将滑块值映射为0-1区间,通过三次变换计算小球位置,最终采用斜率截距最小值比对完成验证。整个过程分为静态初始化、核心计算和动态渲染三个阶段,其中干扰元素不影响核心验证逻辑。该研究仅用于技术学习,强调严禁任何违法行为。

码王吴彦祖的博客 1331

2005 ACM 第几天

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2005 注意:闰年 查表法 #include&lt;stdio.h&gt; int main() { int i,n; int year,mouth,day; int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; w...

weixin_42100472的博客 355

GDB交叉编译与问题解决:从零到精通的深度指南

完成后,GDB会安装到/usr/local/gdb-aarch64/bin,可以用aarch64-linux-gnu-gdb --version检查。:得有支持目标架构的交叉编译工具链,比如gcc-arm-none-eabi(用于ARM裸机)或aarch64-linux-gnu-gcc(用于ARM Linux)。:在配置工具链时,运行aarch64-linux-gnu-gcc --version检查版本,确保工具链没问题。这种场景下用GDB调试,就像在荒野求生,但别慌,GDB依然是你的好伙伴。

大模型大数据攻城狮的专栏 1万+

DRM全解析 —— encoder详解(3)

DRM全解析 —— encoder详解(3)

phmatthaus的专栏 491

杭电ACM 2005 第几天?-C语言

http://acm.hdu.edu.cn/showproblem.php?pid=2005 #include &lt;stdio.h&gt; int main(){ int year,month,day,i,num=0; int d[12]={31,28,31,30,31,30,31,31,30,31,30,31}; while(scanf("%d/%d/%d",&amp;year,&...

1024 883

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

杭电ACM 2005 第几天?

第几天? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 44916    Accepted Submission(s): 17112 Problem Description 给定一个日期,输出这个日期是该

neuxxm的专栏 2468

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

杭电ACM2005--第几天?

第几天? Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 210255Accepted Submission(s): 73448 Problem Description 给定一个日期,输出这个日期是该年的第几天。 ...

ahlt90852036的博客 197

杭电acm P2005第几天

Problem Description 给定一个日期,输出这个日期是该年的第几天。Input 输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。Output 对于每组输入数据,输出一行,表示该日期是该年的第几天。Sample Input 1985/1/20 2006/3/12Sample

三木的博客 259

杭电 acm 2005(第几天?)

题目: Problem Description 给定一个日期,输出这个日期是该年的第几天。 Input 输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。 Output 对于每组输入数据,输出一行,表示该日期是该年的第几天。 Sample Input

VIProgram的博客 519

杭电ACM2005:第几天

#include <iostream> using namespace std; int main(){ int year, month, day,s; char c; while (cin >> year >> c >> month >> c >> day){ switch (month){ case 1:s = 0; break;

咸鱼 548

杭电acm2005第几天

#include<iostream> using namespace std; int main() { char s,s1; int m[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; int m1[12] = {31,29,31,30,31,30,31,31,30,31,30,31}; int year,month,day; while(cin>>year>>s>>month>>s1&g...

死也不承认自己笨的博客 163

杭电acm_2005-一年中第几天

#include int>int>int>while(scanf("%d/%d/%d",&year,&month,&day)!=EOF) { switch(month) { case 1:a=day;break; case 2:a=31+day;break; case 3:a=59+day;break; case 4:a=90+day;break; case 5:a=120+da

ivebeenready的专栏 656

杭电ACM--2005第几天

第几天? Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 37271Accepted Submission(s): 14266 Problem Description 给定一个日期,输出这个日期是该年的第几天。 Inp...

weixin_34262482的博客 97

杭电ACM2005题(第几天?)------C语言

第几天? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 127309    Accepted Submission(s): 46234 Problem Description 给定一个日期,输出这个日期是该年的第几天。

n0d_xy的博客 4073

杭电ACM2005题(第几天?)------Java语言

这一题首先要解决输入后把年月日分别简析出来的问题,再根据月份加上相应的天数,最后判断是不是闰年

n0d_xy的博客 1599

杭电ACM2005 第几天&&&&杭电ACM2006 求奇数的乘积----20140723

2005---- #include "stdio.h" void main() {int mon[12]={0,31,28,31,30,31,30,31,31,30,31,30};  int y,m,d,sum=0,i;  while(scanf("%d/%d/%d",&y,&m,&d)!=EOF)  {if(y%400==0||y%4==0&&y%100!=0)   mon[2]=

lanxuepiaoling的专栏 362

杭电acm2005(求第几天问题)((有问题直接私聊或留言,懒得注释了))

#include<stdio.h> int main() { int year, day, s, i, month; int mon[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; while (scanf("%d/%d/%d", &year, &month, &day) != EOF) { s = 0; mon[1] = 28; if (ye.

qq_61343559的博客 117
上一篇: 杭电ACM 2011: 多项式求和
下一篇: 杭电ACM 1064: Financial Management
Always_TDX
博客等级 码龄12年 225粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值