2022年ACM程序设计与竞赛作业要点.pdf
《2022年ACM程序设计与竞赛作业要点.pdf》由会员分享,可在线阅读,更多相关《2022年ACM程序设计与竞赛作业要点.pdf(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、A C M程序设计与竞赛作业1.采药2.金字塔问题3.毛毛虫问题4.Hamming Problem5.字符串正反连接6.去掉空格7.成绩转换8.金块问题9.工资问题io.“水仙花数”问题11.大小写转换12.取数游戏13.整除问题14.警察抓小偷15.n!16.汉诺塔问题17.猴子吃桃问题(递归)18.A+B for Input-Output Practice 19.A+B for Input-Output Practice(II)20.A+B for Input-Output Practice(III)21.A+B for Input-Output Practice(TV)22.埃及分数23
2、.完数24.Fibbonacci Number _Hdu 207025.Pakets26.不要 62_Hdu20891 问 题 B:采药时间限制:1 S ec内存限制:128 MB提交:8 7 处理:72D U U题目描述辰辰是个很有潜能、天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一种难题。医师把他带到个到处都是草药日勺山洞里对他说:“孩子,这个山洞里有某些不一样日勺草药,采每一株都需要某些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到某些草药。假如你是一种聪颖的孩子,你应当可以让采到的草药的总
3、价值最大。”假如你是辰辰,你能完毕这个任务吗?输入输入的第一行有两个整数T(1 T 1 0 0 0)和 M(1M 100),T 代表总共可以用来采药的时间,M 代表山洞里的草药口勺数目。接下来的M 行每行包括两个在1 到100之 间(包 括 1 和 100)日勺整数,分别表达采摘某株草药的时间和这株草药的价值。输出输出只包括一行,这一行只包括一种整数,表达在规定的时间内,可以采到日勺草药的最大总价值。样例输入70 371 10069 11 2样例输出3#include stdio.hvoid main。int a1021002=0;int t,tl,m 1 ,mJ j 1 ,k=1;scanf
4、(%d%d,&t,&m);scanf(%d%d,&tlfor(il=l;il=tl)akil=ml;)k+;for(i=2;i=m;i+)scanf(%d%d,&tlfor(il=l;il=t;il+)(if(ilml+ak-l il-tl)akil=ak-lil;/采完总价值下降else值得采的状况;|k+;printf(n%dn,am t);)心得:这是一种动态规划的题目,首先定义一种二维数组,根据草药的性价比,优先采用较高的草药,假如时间不够,则减少性价比继续采用草药,直至时间结束,根据采集的草药计算它的最大值,这题通过比较算出也许采的状况,和不能采的状况,假如能采,那再判断值不值得采,
5、得出最优解。2问 题A:金字塔问题时间限制:1 S e c内存限制:128 MB提交:5 4处理:32D D D题目描述)2、片1c?一)I o e I J幺合一种金字塔,如上图所示,请你求出一种从塔顶到塔底的途径,规定途径通过的点的数字和最小。例如上图所示日勺金字塔的最小途径为:40输入输入第一行是一种整数n1000;接下来是n行,第一行一种数;第二行两个数;o o o第 n 行 n 个数;数之间用空格分开。数的链接方式如图所示。输出一种数,就是从塔顶到塔底的途径的最小距离。样例输入5912 1510 6 83 189 519 7 104 16样例输出40#includevoid mainQ
6、int i,j,n;int a100100;定义一种二维数组;scanf(H%dH,&n);for(i=l;i=n;i+)f o r(j=l;j =l ;i-)f o r(j=l;j a i+l j j+l )e l s ea i j =a i j +a口 求 得 每 次 途 径 最 小 值;)p r i n t f C%d ,a l l );)心得:这个题目重要运用了动态规划的思想,定义一种二维数组,把所输入的数据存入进去,然后从它的第一行处理,比较相邻位置数的大小,取最小日勺途径和上一行对应的数相加,获得最小途径,进行循环,直到求出数组中祖 山,即所求的成果。3问 题B:毛毛虫问题时间限制
7、:1 Sec内存限制:128 M B提交:3 2处理:16n n n题目描述Mary在她家门口水平种了一排苹果树,共有N棵。忽然Mary发目前左起第P棵树上(从1开始计数)有一条毛毛虫。为了看到毛毛虫变蝴蝶的过程,Lelc在苹果树旁观测了很久。虽然没有看到蝴蝶,但Lele发现了一种规律:每过1分钟,毛毛虫会随机从一棵树爬到相邻的一棵树上。例如刚开始毛毛虫在第2棵树上,过1分钟后,毛毛虫也许会在第1棵树上或者第3棵树上。假如刚开始时毛毛虫在第1棵树上,过1分钟后来,毛毛虫一定会在第2棵树上。目前告诉你苹果树日勺数目N,以及毛毛刚开始所在的位置P,请问,在M分钟后,毛毛虫抵达第T棵树,一共有多少种
8、行走方案数。输入输入四个整数N P M T。输出输出一种整数,就是行走的方案数。样例输入7444样例输出6#includevoid mainQ(int i,j;int p,m,n,t;inta100100=0;定义一种二维数组;scanf(H%d%d%d%dn,&n,&p,&m,&t);a同=1;毛毛虫刚开始在数组中的位置;for(i=l;i=m;i+)(for(j=l;j=n;j+)a 叫产 ai-lj-l+ai-lj+l;每一步的方案数;|)printf(%dn,amt);M分钟后到T 棵树行走的方案数;)心得:这一题运用了动态规划的思想,毛毛虫日勺每一步都会影响下一步的成果,因此首先按照
9、一般状况找出规律及其其公式,进而算出方案数。首先定义一种二维数组,初始化毛毛虫的起始位置,然后通过两个循环,求出毛毛虫走每一步的方案数,存在二维数组中,然后求出第M 分钟到T 棵树行走的方案数。4 问题 A:Hamming Problem时间限制:1 S ec内存限制:128 MB提交:6 1 处理:23nirn题目描述For each three prime numbers pl,p2 and p3,lets define Hamming sequence Hi(pl,p2,p3),i=l?.as containing in increasing order all the natural
10、numbers whose only prime divisors arepl,p2 or p3.For example,H(2,3,5)=2,3,4,5,6,8,9,10,12,15,16,18,20,24,25,27,.So H5(2,3,5)=6.输入In the single line of input file there are space-separated integers pl p2 p3 i.输出The output file must contain the single integer-Hi(pl,p2,p3).All numbers in input andoutpu
11、t are less than 10八18.样例输入2 3 5 5样例输出6#include stdio.hint minx(int pl,int p2,int p3)/定义有参函数 minx;int min=pl;if(p2min)min=p2;if(p3min)min=p3;return min;/求 pi,p2,p3 W g 最小值;int mainQint pl,p2,p3,t,i;int a,b,c;char num10000;scanf(%)d%d%d%d,&pl,&p2,&p3,&t);a=b=c=0;num0=l;for(i=l;iv=t;i+)numi=minx(pl*num
12、a,p2*numb,p3*mimc);/调用 minx 函数;if(num i=pl*num a)a+;if(num i=p2*num b)b+;if(num i=p3*num c)c+;求所有的能被pl,p2,p3整除的数;printf(%dn,numt);return 0;心得:运用动态规划的思想,定义一种一维数组,把所有符合条件的数按次序存进一维数组中,这个编程运用了函数调用的措施求三个数的最小值,然后把这个最小值存进一维数组中,每次存进一种数,下次都会用存进去口勺这个数求解下一种数,进行循环。5问 题B:字符串正反连接时间限制:1 S ec内存限制:128 MB提交:6 8处理:42n
13、 n n题目描述所给字符串正序和反序连接,形成新串并输出输入任 意 字 符 串(长度=50)输出字符串正序和反序连接所成的新字符串样例输入123abc样例输出123abccba321#include#includevoid mainQchar a50;/定义一种字符串;int i?f;while(scanf(%s,&a)!=EOF)实现多行实例输入;f=strlen(a);/把字符串口勺长度值赋给f;for(i=O;i=0;i-)(printf,%c,ai);/把字符串反序输出;printf(n);)心得:定义一种字符串,运用strlenO函数获取字符串的长度值f,首先用for循环,把这个字符
14、串正序输出,然后再用for循环对这个字符串进行反序输出,这里重要考察了输入输出。6问 题C:去掉空格时间限制:1 S ec内存限制:128 MB提交:2 7 处理:4n n n题目描述读入某些字符串,将其中的空格去掉。输入输入为多行,每行为一种字符串,字符串只由字母、数字和空格构成,长度不超过80o 输入以End of file结束。输出对于每行输入,输出转换后日勺字符串。样例输入Hello World123Nice to meet youabc样例输出HeUoWorld123Nicetomeetyouabc提醒用scanf是不能读入一行有空格口勺字符串日勺,用gets吧。用“gets(str
15、)!=NULL”可以判断输入与否结束,假如此条件为假(即gets(str)二 二NULL),则表达输入结束(对于本题)。#include#includevoid mainQ(int i,f;char a90;/定义一种字符串;while(gets(a)!=NULL)(f=strlen(a);/把字符串的长度值赋给f;fbr(i=O;if;i+)(if(a炉=1)printf(%c”,ai+l);/去掉空格;i=i+1;)elseprintf(c,ai);没有空格,直接输出;)printf(n);)心得:这里也是重要考察输入输出问题,首先也是定义了一种字符串,用strlenO函数获得字符串的长度
16、K进行f次循环,判断这个字符串与否有空格?假如有把数组中日勺每个数往后进一位,即去点空格,假如没有直接输出。7问题D:成绩转换时间限制:1 S ec内存限制:128 MB提交:7 8处理:30nnn题目描述输入一种百分制口勺成绩t,将其转换成对应口勺等级,详细转换规则如下:90 100 为 A;8089为B;7079为C;60-69 为 D;059为E;输入输入数据有多组,每组占一行,由一种整数构成。输出对于每组输入数据,输出一行。假如输入数据不在。10。范围内,请输出一行:“Scoreis error!o样例输入5667100123样例输出EDAScore is error!提醒#inclu
17、deint mainQint x;while(scanf(%d,&x)!=EOF)/实现多行实例输入;(if(x60)printf(En);else if(x70)printf(Dn);else if(x80)printf(Cn);else if(x90)printf(Bn);else if(x=2),最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻的一块。假设有一台比较重量的仪器,但愿用至少的比较次数找出最重和最轻的金块。输入输入共两行,第一行输入金块口勺数量N100000;第二行N金块的重量,用空格间隔。输出两个数用空格分开,最重金块 最轻金块样例输入53 7 9 64样例输出93#
18、includeint mainQint n,al 00000;int max,min,i;while(scanf(%d,&n)!=EOF)实现多行实例输入;for(i=0;in;i+)scanf(%d,&ai);max=min=a0;/把数组 a0的值赋给 max 和 min;for(i=l;imax)max=ai;/求最最重的金块;for(i=l;in;i+)if(aimin)min=ai;求最轻的金块;printf(H%d%dnH?max,min);return 0;心得:这题重要运用分治算法的思想,把一种大问题提成一种个小的子问题去求解,这个题目是经典的二分法问题,把这个题提成两个小问题
19、,即求最重的和求最轻的金块,首先定义了一种一维数组,把所有金块的质量存入其中,把数组的初始值赋给最重的和最轻的金块,然后运用循环对数组中每个金块的质量与金块的初始值进行比较,求的最重和最轻的金块,然后输出。9问题B:工资问题时间限制:1 S ec内存限制:128 MB提交:121处理:74n n n题目描述某单位给每个职工发工资(精确到元),为了保证不要临时兑换零钱,且取款的张数至少,取工资前要记录出所有职工的工资所需多种币值(100,50,20,10,5,2,1元共7种)日 勺 张 数,请编程完毕。输入输入一种工资数10000元输出输出各个币种日勺张数,没有日勺用0替代,中间用空格分开样例输
20、入173样例输出1 1 1 0 0 1 1#includeint mainQint j,z,a;int b7=100,50,20,10,5,2,1;/把所有币值按从从大到小的次序存到一位数组中;ints7=0;/定义一种一位数组,元素值全为0;scanf(%d,&z);for(j=0;j7;j+)(a=z/bj;sj=a;2=z-a*bj;/求需要各个币值的个数;printf(%d,s0);for(j=l;j7;j+)printff%d,sj);/输出需要各个币值的个数;r e t u r n 0;心得:这个题重要运用贪婪算法的措施,运用可行的方略,求出可行解的一种解元素由所有解元素合成问题的
21、一种可行解。要想获得的张数至少,可以先考虑币值最大日勺进行分发,然后再取更小现金的币值。依次取之。首先定义一种一维数组,把币值从大到小存进去,运用一循环,把每次算的钱数的成果,依次对数组日勺币值进行取整。然后依次存入数组输出。10问 题C:水仙花数”问 题1时间限制:1 Sec内存限制:1 2 8 MB提交:138处理:75n n n题目描述判断一种数与否为”水仙花数,所谓 水仙花数 是指这样的一人数:其各位数字的立方和等于该数自身。例如:3 7 1是一种“水仙花数”,3 71=3 3+7-3+1 3.输入一种三位数输出1或者0。代表此数为水仙花数,0代表此数不是水仙花数)样例输入3 71样例
22、输出1#includevoid mainQ(int n,x,y,z;scanf(H%dH,&n);X=n/100;求三位数的百位数字;z=n%10;/求三位数曰勺个位数字;y=(n-(x*100+z)/10;/求三位数的十位数字;if(n=x*x*x+y*y*y+z*z*z)printffW,1);elseprintf,d,0);判断这个三位数与否为水仙花数,是输出1,否输出2;)心得:首先,输入一种三位数,运用对这个数取整,取余,运用数学公式,分别算出它日勺百位,十位,和个位的数字,然后判断这三个数字的平方和与否等于这个三位数,假如是,输出1,假如不是输出0.11问 题E:大小写转换时间限制
23、:10。S ec内存限制:65536 MB提交:182处理:116n n n题目描述读入某些字符串,将其中的小写字母转成大写字母(其他字符不变)。输入输入为多行,每行为一种字符串,字符串只由字母和数字构成,长度不超过80。输入 以“End of file”结束。输出对于每行输入,输出转换后的字符串。样例输入HelloICPC12345abcde样例输出HELLOICPC12345ABCDE#include#includevoid mainQint j;char string8();/定义一种字符串;whileGcanfCs&strinHEOF)/实现多行实例输入;for(j=0;j=a)&(s
24、tringj=z)string。尸 string。-32;实现字母大小写转换;printf(n%snn,string);)心得:这个题目重要考察输入输出,尚有大小写转换问题,首先还是定义一种字符串,用while(scanf(%s,&string)!=EOF)语句实现多行实例输入,对这个字符串进行循环,假如这个字符串有大写的话,转化成小写时,假如有小写的话,那么转化成大写叽12问题B:取数游戏时间限制:1 S ec内存限制:128 MB提交:4 6处理:39n n n题目描述有2个人轮番取2n个数中的n个数,所取数之和大者为胜,请编写算法,让先取数者胜,模拟取数过程。输入输入两行,第一行一种整数
25、NUOOOOO;第二行N个数,用空格分开。输出输出取胜人取数和。失败人取数的和,空格分开。样例输入61 2 3 4 5 6样例输出12 9#includeint mainQ(int n,i,suml,sum2,al 00000;while(scanf(%d,&n)!=EOF)实现多行实例输入;(suml=sum2=0;for(i=0;in;i+)scanf(%d,&ai);for(i=0;in;i=i+2)suml=suml+ai;for(i=l;isum2)printf(n%d%dnn,suml,sum2);elseprintf(n%d%dnM,sum2,suml);”/次序输出取胜人取数和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 ACM 程序设计 竞赛 作业 要点
限制150内