ACM题库完整版课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《ACM题库完整版课件.ppt》由用户(ziliao2023)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ACM 题库 完整版 课件
- 资源描述:
-
1、二项式系数二项式系数 1.题目描述题目描述二项式系数C(n,k)因它在组合数学中的重要性而被广泛地研究。二项式系数可以如下递归的定义:C(1,0)=C(1,1)=1;C(n,0)=1对于所有n 0;C(n,k)=C(n?1,k?1)+C(n?1,k)对于所有0 k n。给出n和k,你要确定C(n,k)的奇偶性。2.输入输入输入包含多组测试数据。每组测试数据一对整数n和k(0 k n 231),占据独立一行。文件结束符(EOF)表示输入结束。3.输出输出对每组测试数据,输出一行,包含一个“0”或一个“1”,即C(n,k)除以2的余数。4.样例输入样例输入1 11 02 15.样例输出样例输出11
2、0#includeint fib(int n,int k)if(n=1&(k2)return 1;else if(k=0)return 1;elsereturn fib(n-1,k-1)+fib(n-1,k);int main()int n,k;while(scanf(%d%d,&n,&k)!=EOF)printf(%dn,fib(n,k)%2);return 0;构造新的模运算构造新的模运算1.题目描述题目描述给定整数a,b,n,要求计算(ab)mod n 2.输入输入多组数据,每组数据一行,为三个用空格隔开的整数a,b,n1=a=40,0=b=3,1=n=5003.输出输出每组数据输出一行
3、,为所求值4.样例输入样例输入2 3 52 2 45.样例输出样例输出30#include#includeint main()答案有错答案有错int a,b,n;while(scanf(%d%d%dn,&a,&b,&n)!=EOF)printf(%dn,(int)(pow(a,b)%n);return 0;计算绩点计算绩点1.题目描述题目描述学校对本科生的成绩施行平均学分绩点制(GPA)。将学生的实际考分根据不同的学科的不同学分按一定的公式进行计算。曾经使用的规定如下:实际成绩 绩点 90-100 4.0 85-89 3.7 82-84 3.3 78-81 3.0 75-77 2.7 72-7
4、4 2.3 68-71 2.0 64-67 1.5 60-63 1.0 60以下 0 1一门课程的学分绩点=该课绩点*该课学分 2总评绩点=所有学科绩点之和/所有课程学分之和 现要求你编写程序求出某人A的总评绩点(GPA)。2.输入输入第一行 总的课程数n(n10);第二行 相应课程的学分(两个学分间用空格隔开);第三行 对应课程的实际得分;此处输入的所有数字均为整数。3.输出输出输出有一行,总评绩点,精确到小数点后2位小数。(printf(%.2f,GPA);)5.样例输入样例输入54 3 4 2 391 88 72 69 566.样例输出样例输出2.52#include#includein
5、t main()int n,i;float a10,c10,b10,sum=0,GPA,d;scanf(%d,&n);for(i=0;i=n-1;i+)scanf(%f,&ai);for(i=0;i=90)ci=4.0;else if(bi=85)ci=3.7;else if(bi=82)ci=3.3;else if(bi=78)ci=3.0;else if(bi=72)ci=2.3;else if(bi=68)ci=2.0;else if(bi=64)ci=1.5;else if(bi=60)ci=1.0;else bi=0;for(i=0;i=n-1;i+)sum+=ai*ci;for(i
6、=0;i=n-1;i+)d+=ai;GPA=sum/d;printf(%.2f,GPA);return 0;将字符串中的小写将字符串中的小写字母转换成大写字字母转换成大写字母母1.题目描述题目描述给定一个字符串,将其中所有的小写字母转换成大写字母 2.输入输入一个字符串3.输出输出将输入的字符串中所有小写字母转换成大写字母后的字符串4.样例输入样例输入helloworld123Ha5.样例输出样例输出HELLOWORLD123HA#include#define N 100int main()int i;char c,strN;gets(str);i=0;while(stri!=0)if(str
7、i=a&stri=z)stri=stri-32;i+;puts(str);return 0;日历问题日历问题 1.题目描述题目描述在我们现在使用的日历中,闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。例如:1700,1800,1900 和 2100 不是闰年,而 1600,2000 和 2400是闰年。给定从公元2000年1月1日开始逝去的天数,你的任务是给出这一天是哪年哪月哪日星期几。2.输入输入输入包含若干行,每行包含一个正整数,表示从2000年1月1日开始逝去的天数。输入最后一行是?1,不必处理。可以假设结果的年份不会超过9999。3.输出输
8、出对每个测试样例,输出一行,该行包含对应的日期和星期几。格式为“YYYY-MM-DD DayOfWeek”,其中“DayOfWeek”必须是下面中的一个:Sunday,Monday,Tuesday,Wednesday,Thursday,Friday 或 Saturday“。4.样例输入样例输入1730 1740 1750 1751-15.样例输出样例输出2004-09-26 Sunday 2004-10-06 Wednesday 2004-10-16 Saturday 2004-10-17 Sunday6.提示提示2000.1.1.是星期六#includeint type(int);char
9、week710=saturday,sunday,monday,tuesday,wednesday,thursday,friday;int year2=365,366;int month212=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31;int main(void)int days,dayofweek;int i=0,j=0;while(scanf(%d,&days)&days!=-1)dayofweek=days%7;for(i=2000;days=yeartype(i);i+)days-=ye
10、artype(i);for(j=0;days=monthtype(i)j;j+)days-=monthtype(i)j;printf(%d-%02d-%02d%sn,i,j+1,days+1,weekdayofweek);return 0;int type(int m)if(m%4!=0|(m%100=0&m%400!=0)return 0;elsereturn 1;求平均年龄求平均年龄1.题目描述题目描述班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位2.输入输入第一行有一个整数n(1=n=100),表示学生的人数。其后n行每行有1个整数,取值为15
11、到25。3.输出输出输出一行,该行包含一个浮点数,为要求的平均年龄,保留到小数点后两位。4.样例输入样例输入218175.样例输出样例输出17.506.提示提示要输出浮点数、双精度数小数点后2位数字,可以用下面这种形式:printf(%.2f,num);#includeint main()int n,i,sum,age;double num;scanf(%d,&n);for(i=0,sum=0;in;i+)scanf(%d,&age);sum+=age;num=(double)sum/n;printf(%.2f,num);return 0;数制转换数制转换1.题目描述题目描述将十进制数转换成指
12、定的进制数 2.输入输入第一行输入一个正整数n,表示需要转换的进制数第二行输入一个十进制正整数3.输出输出转换成n进制的数4.样例输入样例输入6905.样例输出样例输出230数的距离差数的距离差 1.题目描述题目描述给定一组正整数,其中的最大值和最小值分别为max和min,其中的一个数x到max和min的距离差D定义为 abs(abs(x-max)-abs(x-min)。其中,abs()表示求一个数的绝对值2.输入输入输入第一行为整数n,剩余n行每行一个正整数。3.输出输出输出仅一行,它的值为使得距离差D最小的x4.样例输入样例输入5317595.样例输出样例输出56.提示提示函数abs()定
13、义在stdlib.h中#include#include#define N 500int main()int aN,n,i,m,p,r,s,t;scanf(%d,&n);for(i=0;in;i+)scanf(%d,&ai);p=m=a0;for(i=1;iai)m=ai;if(pai)p=ai;s=abs(abs(a0-p)-abs(a0-m);t=a0;for(i=1;ir)s=r;t=ai;printf(%d,t);return 0;登山登山1.题目描述题目描述五一到了,NUIST-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的
14、编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?2.输入输入Line 1:N(2=N=1000)景点数Line 2:N个整数,每个景点的海拔3.输出输出最多能浏览的景点数4.样例输入样例输入8186 186 150 200 160 130 197 2205.样例输出样例输出4#includeint f(int a1000,int n);int main()int n,a1000,i,m;scanf(%d,&n);for(i
15、=0;i0;m-)for(i=1;iai-1)j+;for(i=m-1;in-1;i+)if(aiai+1)j+;bn-m=j;j=1;s=b0;for(i=1;in;i+)if(sbi)s=bi;return s;计算多项式的值计算多项式的值1.题目描述题目描述多项式f(x)=ax3+bx2+cx+d 2.输入输入输入仅一行,分别是x,及参数a、b、c、d的值,每个数都是双精度浮点数。3.输出输出输出也仅一行,f(x)的值,保留小数点后7位。4.样例输入样例输入2.31 1.2 2 2 35.样例输出样例输出33.08386926.提示提示使用printf(%.7lf,.)实现保留小数点后7
16、位。#includeint main()double x,a,b,c,d,y;scanf(%lf%lf%lf%lf%lf,&x,&a,&b,&c,&d);y=a*x*x*x+b*x*x+c*x+d;printf(%.7lf,y);return 0;计算两个分数的和计算两个分数的和 1.题目描述题目描述输入两个分数,形式如1/2,计算它们的和,以分数形式输出 2.输入输入第一行为第一个分数第二行为第二个分数3.输出输出两个分数的和4.样例输入样例输入1/23/45.样例输出样例输出5/4#includeint main(void)int a,b,c,d,m,n,i=2;scanf(%d/%d,&
17、a,&b);scanf(%d/%d,&c,&d);m=a*d+b*c,n=b*d;while(i=m&i=n)if(m%i=0&n%i=0)m=m/i,n=n/i;i+;printf(%d/%d,m,n);return 0;排序排序 1.题目描述题目描述按要求排序2.输入输入第一行为一个整数N(1=N=1000)第二行为N个绝对值不超过10000的整数,表示需要排序的序列3.输出输出输出N行,为N个整数按升序排序后的序列4.样例输入样例输入6100 201 6 8 10 995.样例输出样例输出6 8 10 99 100 2016.提示提示这N个数需要随机产生#include#define N
18、 1000int main(void)int n,i,j,temp,aN;scanf(%d,&n);for(i=0;in;i+)scanf(%d,&ai);for(j=0;jn-1;j+)for(i=0;iai+1)temp=ai;ai=ai+1;ai+1=temp;for(i=0;in;i+)printf(%d,ai);return 0;日志排序日志排序 1.题目描述题目描述有一个网络日志,记录了网络中计算任务的执行情况,每个计算任务对应一条如下形式的日志记录:“hs_10000_p”是计算任务的名称,“2007-01-17 19:22:53,315”是计算任务开始执行的时间“年-月-日 时
19、:分:秒,毫秒”,“253.035(s)”是计算任务消耗的时间(以秒计)hs_10000_p 2007-01-17 19:22:53,315 253.035(s)请你写一个程序,对日志中记录计算任务进行排序。时间消耗少的计算任务排在前面,时间消耗多的计算任务排在后面。如果两个计算任务消耗的时间相同,则将开始执行时间早的计算任务排在前面。2.输入输入日志中每个记录是一个字符串,每个字符串占一行。最后一行为空行,表示日志结束。日志中最多可能有10000条记录。计算任务名称的长度不超过10,开始执行时间的格式是YYYY-MM-DD HH:MM:SS,MMM,消耗时间小数点后有三位数字。计算任务名称与
20、任务开始时间、消耗时间之间以一个或多个空格隔开,行首和行尾可能有多余的空格。3.输出输出排序好的日志记录。每个记录的字符串各占一行。输入的格式与输入保持一致,输入包括几个空格,你的输出中也应该包含同样多的空格。4.样例输入样例输入hs_10000_p 2007-01-17 19:22:53,315 253.035(s)hs_10001_p 2007-01-17 19:22:53,315 253.846(s)hs_10002_m 2007-01-17 19:22:53,315 129.574(s)hs_10002_p 2007-01-17 19:22:53,315 262.531(s)hs_10
21、003_m 2007-01-17 19:22:53,318 126.622(s)hs_10003_p 2007-01-17 19:22:53,318 136.962(s)hs_10005_m 2007-01-17 19:22:53,318 130.487(s)hs_10005_p 2007-01-17 19:22:53,318 253.035(s)hs_10006_m 2007-01-17 19:22:53,318 248.548(s)hs_10006_p 2007-01-17 19:25:23,367 3146.827(s)5.样例输出样例输出hs_10003_m 2007-01-17 19
22、:22:53,318 126.622(s)hs_10002_m 2007-01-17 19:22:53,315 129.574(s)hs_10005_m 2007-01-17 19:22:53,318 130.487(s)hs_10003_p 2007-01-17 19:22:53,318 136.962(s)hs_10006_m 2007-01-17 19:22:53,318 248.548(s)hs_10000_p 2007-01-17 19:22:53,315 253.035(s)hs_10005_p 2007-01-17 19:22:53,318 253.035(s)hs_10001_
23、p 2007-01-17 19:22:53,315 253.846(s)hs_10002_p 2007-01-17 19:22:53,315 262.531(s)hs_10006_p 2007-01-17 19:25:23,367 3146.827(s)数圈数圈 1.题目描述题目描述以1为中心,用2,3,。,n的数字围绕着中心输出一个数圈,若n=47 8 9 106 1 2 115 4 3 1216 15 14 132.输入输入一个整数n(1=n=10)3.输出输出一个数圈4.样例输入样例输入55.样例输出样例输出21 22 23 24 2520 7 8 9 1019 6 1 2 1118 5
24、 4 3 1217 16 15 14 13#include#define N 10int main()int numNN;int circle=2,row,column,n,i=1,j;/circle为每转为每转半圈的数字个数半圈的数字个数 scanf(%d,&n);/*确定开始的那个确定开始的那个1的位置的位置*/if(n%2)row=column=n/2;else row=column=n/2-1;numcolumnrow=i+;numcolumn+row=i+;while(circle=n)j=1;while(j=circle-1)/*当当circle为奇偶数时,行的增减不一样为奇偶数时
25、,行的增减不一样*/if(circle%2)num-columnrow=i+;else num+columnrow=i+;j+;circle+;j=1;while(j=circle-1)/*同上同上*/if(circle%2)numcolumn-row=i+;else numcolumn+row=i+;j+;for(i=0;in;i+)for(j=0;jn;j+)printf(%3d,numij);printf(n);return 0;细菌繁殖细菌繁殖1.题目描述题目描述一种细菌的繁殖速度是每天成倍增长。例如:第一天有10个,第二天就变成20个,第三天变成40个,第四天变成80个,。现在给出第
展开阅读全文