ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:424.53KB ,
资源ID:25435043      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25435043.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第二届新生C语言竞赛解题报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第二届新生C语言竞赛解题报告.docx

1、第二届新生C语言竞赛解题报告第二届浙江师范大学C语言程序设计竞赛解题报告(罗方炜,lfw2565295 ,浙师大10计软)比赛概述首先是本届比赛的题目:本次比赛总共十道题,由应宁宸,陈余康,张超,陈新弛,钟浙云组成的编题组负责出题,由罗方炜,詹皇彬组成的验题组负责验题和整体难易程度的把握,同时詹皇彬还负责了服务器的运行维护。本次比赛的提交统计:其中A,D,G为简单题,B,E,F,H,J为中等题,C,I为难题,比赛中的提交情况也符合这个题目难易度分类,A,D,G做出的人很多,获奖的人中,这三题基本要保证过掉。本次比赛前十名的情况:其中,名字前打”*”的同学是友情参赛人员,他们是ACM集训队大二的

2、女将,为明年的省赛练兵。剩下的5名同学是本次比赛一等奖的获得者,经过5个小时的角逐,潘旭脱颖而出,解得8道,夺得“新生杯”,曹俆康,任超群,陈政伊,陶柄丞解出6道以上,获得一等奖,恭喜他们。具体的获奖情况,可以参见题目讲解A:YQ的手表Time Limit:1000MSMemory Limit:32768KTotal Submissions:249Accepted:90Description小YQ上次很快完成了爸爸给她得任务,爸爸奖励了她一个电子手表。小YQ非常喜欢她的电子表,没事就盯着她的电子表看。有天她看见电子表上显示“12:21”,小YQ觉得很漂亮。现在给你一个时间,格式是xx:xx,请

3、你判断是否合法(也就是符合电子表显示的数字,比如00:10合法,02:30合法,23:23合法,23:66不合法,24:00不合法)。Input输入数据一行,为一个字符串,用空格隔开。表示时间时间,格式为XX:XX ,Output合法输出”Yes”不合法输出”No”Sample Input00:1002:3023:6624:00Sample OutputYesYesNoNo思路:本题虽然是字符串形式输入一个“时间”,但格式比较固定,所以可以用scanf(“%d:%d”,&a,&b)形式,当成是两个整个的输入,这样判断就很简单了,判断条件就是时针的值在023之间,分针的值在059之间。参考代码:

4、#includeint main() int m,n; scanf(%d:%d,&m,&n); if (m=0&m=0&n60) printf(Yes); else printf(No); return 0;B:TouchTime Limit:1000MSMemory Limit:32768KTotal Submissions:133Accepted:35Description现有面积无限大的一堵墙,墙上有根一端固定且无限长的杆,初始状态是竖直向上的。另外,在墙上有n个钉子。为研究方便,我们以杆所在的方向为y轴,建立直角坐标系,如图:现在,杆以下端(固定端)为中心,向右旋转,请问碰到的第一个钉

5、子编号是多少?针对上图:即此时,墙上的杆固定端位于(0,4),且此时墙上有3个钉子,则碰到的第一个钉子编号是2.Input第一行有两个数y0,n,其中y0表示杆固定端位于(0,y0),n表示有墙上有n个钉子。接下来有n行,每行有两个数xi,yi(1=i=Kj(对任何的j!=i)在比较两个斜率大小时,可以直接用y/x的形式,也可以转化为乘法判断,以避免浮点运算。参考代码:#include#includeint main() int n; double m,x10001,y10001; scanf(%lf%d,&m,&n); if(m10000) while(1); if(n10000) whil

6、e(1); double maxK; int id; for(int i=0; in; i+) scanf(%lf%lf,&xi,&yi); if(xi10000) while(1); if(yi10000) while(1); yi-=m; double k=yi/xi; if(i=0) maxK=k, id=i; else if(maxK=0; i-) /看看ID是不是唯一 if(maxK=(yi/xi) id=i; printf(%dn,id+1);C:日期Time Limit:1000MSMemory Limit:32768KTotal Submissions:12Accepted:1

7、DescriptionYNingC同学在看日历的时候想到一个问题。问题很简单,今天是12月4日,今天又是星期天(万恶啊,为什么比赛都是安排在星期天啊),不过好吧,那么纵观历史长河12月4日是星期天的概率是多少的?假如2012不是世界末日,地球的寿命是无限大等等Input数据只有一行,有三个数据,前两个是整数,M, D, 表示M月D日,第三个数据是一串字符,为”Mon, Tue, Wed, Thu, Fri, Sat, Sun”, 分别表示周一至周日。Output每组数据输出一行,输出一个概率保留4位小数,格式见样例。Sample Input12 4 SunSample Output14.500

8、0%Hint用printf(%n);输出%。思路:这题的思路主要就是找循环节,400年为一个循环,所以计算概率的时候,只要找到相应的分子天数与分母的天数就行。做这道题的前提可以参考另外道计算天数的题,里面有闰年判断方法。当然本题作为难题,主要因为用计算机程序寻找数字间的规律对新手来说比较难,但这个却是开动思维,探索发现的好题。参考代码:#include#include#includeusing namespace std;int sum154010;int mo13=0,31,28,31,30,31,30,31,31,30,31,30,31;int y,m,d,w,T;char s20;boo

9、l check() if(m!=2) return true; if(y%4!=0) return true; if(y%100!=0) return false; if(y%400=0) return false; return true;void add() w=(w+1)%7; d+; if(dmom & check()|d-mom=2) m+; d=1; if(m=13) m=1; y+; void init() for(int i=1;i=12;i+) for(int j=1;j=31;j+) for(int k=0;k=7;k+) sumijk=0; y=2011,m=10,d=3

10、,w=0; for(int i=0;i146097;i+) summdw+; summd7+; add(); void trans() if(s0=M) w=0; else if(s0=T) if(s1=u) w=1; else w=3; else if(s0=W) w=2; else if(s0=F) w=4; else if(s0=S) if(s1=a)w=5; else w=6; int main() init(); scanf(%d%d%s,&m,&d,&s); trans(); printf(%0.4lf%n,summdw*100.0/summd7); return 0;D:比大小T

11、ime Limit:1000MSMemory Limit:32768KTotal Submissions:162Accepted:103Description给出三个正整数a,b,c,请判断a2+b2与c2的大小关系Input每行有三个正整数a,b,c(不超过10000)Output如果满足a2+b2 c2,则输出c2,则输出 。Sample Input3 4 51 1 25 4 3Sample Output=思路:这题应该算最简单的题了,输入三个数字a,b,c,然后判断a*a+b*b与c*c的大小就行。参考代码:#includeint main() int a,b,c; scanf(%d %

12、d %d,&a,&b,&c); if(a*a+b*bc*c)printf(c*c)printf(); return 0;E:不等式Time Limit:1000MSMemory Limit:32768KTotal Submissions:148Accepted:21DescriptionFarmer John 喜欢不等式,但是他数学很差,现在他需要你的帮助,帮他判断能否成功找到n个正整数,a1,a2,.,an,使得满足下列不等式 : a12+a22+.+an2x a1+a2+.+anyInput输入包含三个整数 n, x and y (1n104,1x109,1y104).Output如果能够

13、找到,输出”Yes”,否则输出”No”。Sample Input5 15 152 3 2Sample OutputYesNo思路:假如两个数a,b,a+b的和固定,做a*a+b*b运算时,绝对值(a-b)越大,a*a+b*b的值就越大。所以,可以推出,在保证a0an都为正整数的前提下,当a0为最大,且a1.ai.an 都为1 的时候是满足两个不等式最优条件,所以只要判断这种情况的数据就可以了。参考代码:#includeint main() int a, sum; int n, x, y; scanf(%d%d%d, &n, &x, &y); if(n10000) while(1); if(x1

14、000000000) while(1); if(y10000) while(1); if (n y) printf(Non); return 0; sum = n - 1; a = y - (n - 1); sum += a*a; if (sum x) printf(Non); else printf(Yesn); return 0;F:又见helloTime Limit:1000MSMemory Limit:32768KTotal Submissions:27Accepted:16Description小A并不满足于数hello的个数,野心勃勃的他找了篇长文章,奇怪的是这篇文章仅由h、e、l

15、、o四个字符组成。而小A想去掉文章中的一些字符,仅留下一个hello,小A这次想知道,去字符的方法有几种。Input有多个测试文件,每个文件中仅有一行,为一个串,仅由h、e、l、o四个字符组成,串长度不大于200,至少1个字符。Output一个整数, 去字符的方法种数。Sample InputhellollohellllohhellohhehhlloSample Output7622思路:本题其实为动态规划题.状态定Dpij 表示为到串的第i位为止,得到以j结尾的串的方法个数,也就是将除留下的5个字符外的其它字符全部删除,这样就与原问题等价了。其中,j=0为以h结尾。j=1为以e结尾。j=2为

16、以第一个l结尾。j=3为以第二个l结尾。j=4为以o结尾。状态转移Dpij = Dpi-1j ; j = 0,1,2,3,4.If(arri=h) Dpi0 +; If(arri=e) Dpi1+=Dpi-10;If(arri=l) Dpi2+=Dpi-11,Dpi3+=Dpi-12;If(arri=o) Dpi4+=Dpi-13;状态临界Dpij=0,I = 0,1,2,3.strlen(arr);If(arr0 = h)Dp00 = 1;最后的答案为Dpstrlen(arr)-14;但考虑到动态规划的算法对新生太难,几乎没什么人接触过,所以把题目规模变小了,看看大家有没有其他方法做。果然,

17、解出此题的人几乎都用了暴搜,用5重for循环枚举可能性,本次比赛可以通过,但是当数据规模稍微大点就不行了,所以想进一步入门ACM程序竞赛的同学,有必要学一下动态规划。参考代码:#include#includeint main() int dp2055; /表示到i个字符,组成h,he,hel,hell,hello有多少种 char a205; int len; scanf(%s,a); len=strlen(a); if(len200) while(1); for(int i=0; ilen; i+) for(int j=0; j5; j+) dpij=0; for(int i=0; ilen

18、; i+) for(int j=0; j5; j+) if(i) dpij=dpi-1j; if(ai=h) dpi0+; else if(ai=e) dpi1+=dpi-10; else if(ai=l) dpi2+=dpi-11, dpi3+=dpi-12; else if(ai=o) dpi4+=dpi-13; else while(1); for(int j=0; j1000000000) while(1); printf(%dn,dplen-14);G:helloTime Limit:1000MSMemory Limit:32768KTotal Submissions:97Accep

19、ted:64Description礼是中华民族的传统美德,需要我们发扬光大。最近小A初学英语,刚学会了讲hello,非常地兴奋。她专注与发现一片文章中hello的数量。给定一段只由26个小写字母组成的文章,请输出其中有多少个hello,只有连续的5个字母是hello才算一次。Input一组测试数据,里面有一段文章。只由26个小写字母组成。文章长度不大于100个字符,至少一个字符。Output输出其中有多少个hello。Sample InputhellohhhellhellhooohellohhelloSample Output3思路:简单模拟题,以文章中的每个字符为开头,查看以它连续的5个字符

20、是不是hello,若是则答案加1。考察的是对字符串的使用和for循环语句的使用。参考代码:#include#includeint main() char a205; int len; int i,res=0; scanf(%s,a); len=strlen(a); if(len100) while(1); for(i=0; ilen; i+) if(aiz) while(1); if(i+4=len) continue; if(ai=h & ai+1=e & ai+2=l & ai+3=l & ai+4=o) res+; printf(%dn,res);H:可爱的YQTime Limit:10

21、00MSMemory Limit:32768KTotal Submissions:72Accepted:10Description小YQ是个即可爱又聪明的小孩子。有天,爸爸给她一个有意思的任务,就是在电脑的一个文件中,找到特定的文件。小YQ还不会用搜索文件的的方法,但是她会点鼠标,现在给你文件夹的信息,请你能告诉小YQ,她最少点几次鼠标就能发现这个文件。Input输入数据第一行有两个数 n (10=n=5000),m (1=m=10),n表示字符串str的长度,m表示询问的个数。第二行一个字符串str,表示文件的信息,字符串中所包含的文件名都不一样。用括号来表示子文件,用逗号分开文件夹,具体见

22、样例。接下来m行,每行一个字符串,长度不超过10,表示小YQ要找的文件名。Output对于每个询问,输出最少点击鼠标的次数。如果这个文件不存在,输出are you kidding me?Sample Input68 5zhangc(program(poj(1000,1001,1002),hdu(1003,1004),zjnu(1005,1006)poj100210031006zjuSample Output2333are you kidding me?思路:此题比较简单,数据不大直接暴力查找就好了。查找到当前文件时,要点击的鼠标次数就是在此之前左括号的个数总和减去右括号的个数总和。注意一下子串

23、问题,在匹配前后判断一下是否为非字母,保证询问的文件匹配到的是一个完整的文件名。这题对新手来说,还是考察字符串和for循环语句的操作,只是难度比上一题大了。参考代码:#include#include#define M 5005char fileM;char str20;int main() int n,m; int i,j,k; scanf(%d %d,&n,&m); scanf(%s,file); if(n5000) while(1); if(m10) while(1); while(m-) scanf(%s,str); int len=strlen(str); if(len10) whil

24、e(1); int cnt=0; for(i=0;i=n-len;i+) if(filei=()cnt+; else if(filei=)cnt-; else if(!(i=0|filei-1=,|filei-1=()continue; for(j=0;j=len) char behind=filei+j; if(behind=(|behind=,|behind=)|behind=0) break; if(i=n-len)printf(%dn,cnt); else printf(are you kidding me?n); return 0;I:菱形Time Limit:1000MSMemor

25、y Limit:32768KTotal Submissions:17Accepted:1Description菱形是对称性质很好的一种图形,我们用Dia(x0,y0,r1,r2)来表示一个菱形,它是由菱形的中心坐标以及对角线信息确定的,其中(x0,y0)表示中心坐标, r1为水平对角线长度的一半,r2为竖直对角线长度的一半,如图所示:现有两个菱形Dia(x0,y0,r1,r2),Dia(x0,y0,r1,r2),请判断该两个菱形的位置关系如果相交,请输出intersection如果是包含关系,请输出containing如果是相离关系,请输出away注意:1.只要两菱形在边界上有公共点,此时就认为两菱形

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1