杭电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。

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

讲透 ABAP CDS 注解名称:简单名、结构化名、@ 与 @<、作用域与分组 本文从开发者角度梳理ABAP CDS注解的命名规则与实战写法,重点解析: 语法规则:@与@<的使用场景、结构化命名规范、作用域唯一性要求 评估机制:ABAP运行时与组件框架的注解处理差异 分组技巧:花括号分组简化重复前缀的书写 实战示例:包含完整CDS View Entity(演示注解分组与@<用法)和ABAP报表(读取打印注解) 常见问题:命名错误导致激活失败、框架忽略等注意事项 最后通过航空预订统计案例,展示如何结合多种注解类型实现业务需求。 阅读详情

相关推荐

保姆级教程:用Unidbg搞定阿里系App的x-sign和长x-mini-wua签名(附完整Java代码)

本文详细介绍了如何使用Unidbg框架模拟执行阿里系App的原生库,生成关键的x-sign和x-mini-wua签名参数。通过完整的Java代码示例和实战技巧,帮助开发者高效实现签名算法,适用于安全研究、数据分析和第三方应用开发场景。

weixin_29243279的博客 486

给定一个日期,输出这个日期是该年的第几天。输入数据有多组,每组占一行,数据格式为 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万+

Linux磁盘扩容实战:用parted命令无损扩展/data分区(附常见报错解决方案)

本文详细介绍了在Linux生产环境中使用parted命令对已挂载的/data分区进行在线磁盘扩容的完整实战流程。通过风险评估、状态检查、parted工具深度解析及实战演练,指导用户安全完成动态扩容,并提供了常见报错如'Partition is being used'、MBR 2TB限制等的解决方案,确保业务不中断、数据不丢失。

weixin_29207439的博客 297

周赛3

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

weixin_43792166的博客 163

QMT vs Ptrade:量化交易新手如何根据需求选择券商系统(附实战案例)

本文对比了QMT和Ptrade两大券商量化交易系统的核心差异,帮助量化交易新手根据需求选择合适的平台。QMT适合技术面策略开发,执行效率高;Ptrade则提供全面的财务数据和复杂策略支持。通过实战案例,展示了如何结合两平台优势实现高效量化交易。

weixin_42683394的博客 527

Vivado新手必看:5分钟搞定FPGA程序固化到Flash(附MCS文件生成全流程)

本文为FPGA新手详细解析了如何将程序固化到Flash存储器的完整流程。核心在于理解SRAM工艺FPGA断电易失的特性,并利用Vivado工具将比特流文件转换为Flash可识别的MCS文件。文章重点拆解了生成MCS文件的关键配置步骤、硬件连接要点,以及通过JTAG烧写Flash的实战操作,并提供了常见启动失败问题的排查清单,帮助开发者实现设计从调试到产品部署的关键跨越。

weixin_29230901的博客 352

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万+

Vivado IP核与约束文件管理指南:解决OOC警告、COE文件丢失与Block Design复用

本文详细介绍了Vivado IP核与约束文件管理的系统化方法,包括解决OOC警告、COE文件丢失与Block Design复用等常见问题。通过IP核锁定机制、分层约束架构和动态约束技术,提升FPGA工程的健壮性和团队协作效率,特别适合中大型项目开发。

weixin_30887919的博客 430

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

2021.02.23丨Virsorter2安装使用及答疑

最近项目比较多,又在学英语,写文章的时间少了很多。最近接到一个病毒组装的项目。用之前组装工具(ABYSS、SPAdes)都没有能够组装较为完整的scafford,今天介绍一款专门用于组装病毒的工具——Virsorter。 Virsorter最早版本发布于2015年,目前已经有了第二个版本。主要用于病毒的组装的注释。详细情况可以查看文章:https://peerj.com/articles/985/ 安装流程 安装文档: https://github.com/jiarong/VirSorter2/b

4836

南方电网专业面试题(电气类-继电保护)(目录)

南方电网专业面试题(电气类-继电保护)(目录) 这些面试题围绕继电保护的基本概念、工作原理、分类、性能要求,以及变压器、断路器、母线保护、自动重合闸等电力系统关键设备的保护机制和操作原则展开,旨在评估应聘者对电力系统保护和控制策略的深入理解和实际应用能力。

weixin_44808274的博客 2159

杭电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

《UDS协议从入门到精通》系列——图解0x23:通过地址读取内存

如何读取ECU中指定内存地址的数据?图解UDS 0x23服务带你快速上手!!

车载系统攻城狮 2623

杭电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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

杭电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

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

杭电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、付费专栏及课程。

余额充值