《2022年ACM程序设计与竞赛作业要点.pdf》由会员分享,可在线阅读,更多相关《2022年ACM程序设计与竞赛作业要点.pdf(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
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);”/次序输出取胜人取数和
26、。失败人取数和;return 0;心得;这题重要运用贪心算法的思想,要想先取数人获胜,就得让这个人每一步都尽量获得最大的数,这样他取数的和才会总体不小于后取数的那个人的取数和。首先定义一种一维数组,把要获得数从小到大的次序放在里面,然后一种人从第一种按照隔一种数取,求和suml;另一种人从第二个按照隔一种人取,求和su m 2,比较suml和sum2的最大值,输出。13问 题C:整除问题时间限制:1 S ec内存限制:128 MB提交:7 0处理:44D im题目描述编写算法对输入的一种整数,判断它能否被3,5,7整除,并输出如下信息之一:能同步被3,5,7整除;能被其中两个数(要指出哪两个)
27、整除;能被其中一种数(要指出那一种)整除;不能被3,5,7任一种整除;输入输入一种整数100000;输出假如都能整除输出“all假如都不能整除输出nonel假如能被3和5整除则输出“3 5”。中间有一种空格,注意按由小到大输出。样例输入35样例输出57#includevoid main。long n;int k;scanf(n%dH,&n);k=(n%3=0)+(n%5=0)*2+(n%7=0)*4);判断整数与否能被 2,3,5 整除;switch(k)case 7:printf(Halln);break;case 6:printf(n5 7H);break;case 5:printf(n3
28、 7n);break;case 4:printf(H4H);break;case 3:printf(n3 5H);break;case 2:printf(n 5n);break;case 1 :printf(n3n);break;case O:printf(nnonen);break;用switch语句输出成果;心 得:这 题 重 要 考 察 输 入 输 出 问 题,首 先 输 入 一 种 整 数,运用语句k=(n%3=0)+(n%5=0)*2+(n%7=0)*4),判断这个数能否被 2,3,5 整除,用 switch 语句输出所有也许发生的成果,然后输出题目中所规定输出的成果,其中用swit
29、ch语句起到了优化算法的作用。14问题A警察抓小偷时间限制:1 S ec内存限制:128 MB提交:115处理:88O D D题目描述警察局抓了 a,b,c,d,4名小偷嫌疑犯,其中只有一种人是小偷,审问中,a 说:我不是小偷,b 说:c 是小偷,c 说:小偷肯定是d,d 说:c 在冤枉人。目前已经懂得4 个人中3 人说的是真话,一人说的是假话,问究竟谁是小偷。输入输出小偷是c样例输入样例输出小偷是C#includevoid mainQ(int x;for(x=l;x=4;x+)执行 4 次循环;if(x!=l)+(x=3)+(x=4)+(x!=4)=3)判断与否有三个人说真话的状况;prin
30、tf(n%cn,64+x);)心得:这个题目重要考察把文字信息转化为数字信息,即信息数字化,把A,B,C,D当作1,2,3,4;x定义为小偷,然后把A,B,C,D四人所说的话变成数字语言,判断当他们四个人有三个人说真话的状况,然后以把数字变成字母输出。15问题B:n!时间限制:1 S ec内存限制:128 MB提交:262处理:162n n n题目描述输入一种整数N,输出它的阶乘。输入输入一种整数20;输出输出它的阶乘样例输入5样例输出120提醒#includeint mainQint add(int m);/对 add函数进行申明;int n,sum;scanf(%d,&n);sum=add
31、(n);printf(n%dnH,sum);return 0;int add(int n)定义 add 函数int f;if(n=01|n=l)f=l;/判断当n 等于。和 1 这两种状况;elsef=n*add(n-l);/调用 add 函数求值;return f;心得:这里重要运用函数的递归调用,首先用i f对输入的数进行判断,看与否为1和0,假如是,那么输出其阶乘等于1,假如不是那么调用函数f=n*add(n-l)进行求值,add函数总共被调用了 n次,求得最终日勺成果,输出。16汉诺塔问题时间限制:1 S ec内存限制:128 MB提交:224处理:138Dill题目描述把N个盘子从A
32、柱子借助B柱子移到C柱子,规定每次只能移动一种盘子,并且小盘子不能放到大盘子上。问怎样移动。输入输入盘子的个数N(=10)输出输出移动的次数。样例输入3样例输出7提醒#includeint mainQint i,j,n,sum;scanf(%d,&n);j=l;if(n!=l)清除盘子口勺个数为1 口 勺 状 况;(for(i=l;i=n;i+)产 j*2;)sum=j-l;/求盘子移动的次数;elsesum=l;printf(n%dn,sum);return 0;心得:这题重要考察循环与递归问题,先假设盘子的个数,取几种特殊值,找出移动盘子次数的规律。这个编程首先判断盘子个数,假如是1,则输
33、出1次,假如不是1,执行n次循环,求得j,然后求出移动盘子的次数j-1,输出。17问题D:猴子吃桃子问题(递归)时间限制:1 Sec内存限制:1 2 8 MB提交:98处理:8 7n n n题目描述一只猴子摘了若干桃子,每天吃既有桃子口勺二分之一多一种,到第10天时就只有一种桃子了,求本来有多少个桃。输入输出输出本来的桃子数样例输入样例输出提醒#i n c lu d e i n t m a i n Q(i n t i,x=l;f o r(i=9;i 0j i-)/执行 9 次循环;x=(x+l)*2;求每天桃子的个数;p r i n t f(n%dnH,x);r e t u r n 1;)心得
34、:这个题目运用数学中倒推的措施求得,先求出第1 0天桃子的个数,然后再求出前一天桃子的个数,直到求出第1天桃子的个数,找出其规律。设桃子的个数为X,则每天剩余桃子的个数满足公式x=(x+l)*2,再用一种for循环求出本来的桃子数。18 问题 A:A+B for Input-Output Practice(I)时间限制:1 S ec内存限制:128 MB提交:402处理:183a n n题目描述Your task is to Calculate a+b.Too easy?!Of course!I specially designed the problem for acm beginners.
35、You must have found that some problems have the same titles with this one,yes,all theseproblems were designed for the same aim.输入The input will consist of a series of pairs of integers a and b,separated by a space,one pair ofintegers per line.输出For each pair of input integers a and b you should outp
36、ut the sum of a and b in one line,andwith one line of output for each line in input样例输入1 510 20样例输出630提醒#includevoid mainQint a,b,s;while(scanfC%d%d”,&a,&b)!=EOF)/实现多行实例输入;(s=a+b;/求a和b的和;printf(%dn,s);)心得:这个题重要考察了输入和输出问题,目的是计算整数a和b的和,首先用while(scanf(%d%d,&a,&b)!=EOF)语句实现多行实例输入,然后求出a和b的和,输出。19A+B for
37、Input-Output Practice(EQ时间限制:1 S e c内存限制:128 M B提交:310处理:17 9n n n题目描述Your task is to Calculate a+b.输入Input contains an integer N in the first line,and then N lines follow.Each line consists of apair of integers a and b,separated by a space,one pair of integers per line.输出For each pair of input inte
38、gers a and b you should output the sum of a and b in one line,andwith one line of output for each line in input样例输入21 510 20样例输出630提醒a n n#includevoid main。int a,b?n;scanf(H%dH,&n);while(n-)/限制求和日勺次数;scanf(%d%d”,&a,&b);/输入 a,b;printf,dn,a+b);/求 a,b 日 勺 和;)心得:这个题目重要考察了输入输出问题,题目规定第一行输入要输入要计算和的数量,用 whi
39、le(n-)语句满足了题目的规定,即执行n 次,然后就是输入a 和 b,接着求出和,输出。20 问题 C:A+B for Input-Output Practice(HI)时间限制:1 S ec内存限制:128 MB提交:314处理:169n n n题目描述Your task is to Calculate a+b.输入Input contains multiple test cases.Each test case contains a pair of integers a and b,one pairof integers per line.A test case containing 0
40、 0 terminates the input and this test case is not tobe processed.输出For each pair of input integers a and b you should output the sum of a and b in one line,andwith one line of output for each line in input样例输入1 510 2000样例输出630#includevoid mainQ(int a,b;whilc(scanff%d%d”,&a,&b)!=EOF&!(a=0&b=0)/*实现多行实
41、例输入,当 a,b 都为0时结束*/(printf(%dn,a+b);求 a,b 的和;)心得:这个题目也是输入输出问题,目的也是求出a和b的和,然后按规定输入输出,对于输入:while(scanf(%d%d”,&a,&b)!=EOF&!(a=0&b=0)运用这个语句实现多行实例输入,假如输入0 0,则结束,然后求得a和b的和,输出。21 问题 D:A+B for Input-Output Practice(TV)时间限制:1 S ec内存限制:128 MB提交:287处理:166n n n题目描述Your task is to Calculate the sum of some intege
42、rs.输入Input contains multiple test cases.Each test case contains a integer N,and then N integersfollow in the same line.A test case starting with 0 terminates the input and this test case isnot to be processed.输出For each group of input integers you should output their sum in one line,and with one lin
43、eof output for each line in inputSample Input样例输入4 10 2 3 405 11 2 8 5 50样例输出5531提醒#includevoid mainQ(int a,s;int n=l;while(n!=0)(scanf(%d,&n);if(n=0)break;/判断n 与否为断0,是结束,不是执行下面语句;s=0;for(inti=0;in;i+)执行 n 次循环;(scanf(u%dM,&a);s=s+a;每次循环求和;printf(n%dnn,s);心得:同样,这个题目也是重要考察了输入输出问题,计算某些整数日勺和,并按指定的格式输出,首
44、先输入某些整数判断与否都为(),假如是,则结束,假如不是则执行循环,把所有输入的整数相加,然后输出。22问 题 B:埃及分数时间限制:1 S ec内存限制:128 MB提交:2 1 处理:11nnn题目描述设计一种算法,把一种真分数表达为至少埃及分数之和的形式,所谓埃及分数,是指分子为1 的分数。如 7/8=1/2+1/3+1/24。输入输入两个整数,第一种表达分子,第二个数表达分母。输出输出埃及分数之和,按分母有小到大的次序,中间用空格分开。样例输入7 8样例输出2 3 24提醒#includeint mainQ(int a,b,c;while(scanf(n%d%d”,&a,&b)!=EO
45、F)/实现多行实例输入;if(a=l|b%a=0)printf(%dn,b/a);/假如这个数为1 或分子为1,输出分母日勺值;while(a!=l)c=b/a+l;a=a*c-b;b=b*c;printf(%d,c);通过公式求出埃及分数。if(b%a=0|a=l)(printf(%dn,b/a);a=l;)return 0;心得:首先通过while语句实现多行实例输入,首先输入这是分数的口勺分子分母,判断这个数与否为1或这个数的分子为1,假如是,直接输出分母时值;接下来用一while循环,通过求公式依次算出埃及数,然后输出,用每次计算的成果判断分子与否能整除分母或分子为一,假如是,直接输出
46、整除后成果。23问题A:完数时间限制:1 S ec内存限制:128 MB提交:192处理:70n n n题目描述完数的定义:假如一种不小于1的正整数日勺所有因子之和等于它的自身,则称这个数是完数,例如6,28都是完数:6=1+2+3;28=1+2+4+7+14。本题的任务是判断两个正整数之间完数的个数。输入输入数据包括多行,第一行是一种正整数n,表达测试实例的个数,然后就是n个测试实例,每个实例占一行,由两个正整数numl num2 Jn5t,(lnuml,num2 10000)o输出对于每组测试数据,请输出num l和num2之间(包括num l和num 2)存在的完数个数。样例输入22 5
47、57样例输出01提醒#includeint mainQint n,numl,num2,sum,m,i;int j,k;while(scanf(%d,&n)!=EO F)/实现多行实例输入;(for(i=0;in;i+)/执行 n 次循环;scanf(%d%d,&numl,&num2);/输入两个整数;m=0;for(j=numl;j=num2;j+)/执行 num2-numl+l 次循环;(sum=0;dr(k=l;kj;k+)(if(j%k=O)/判断num l和num2之间时数与否能被k整除;sum=sum+k;if(sum=j)m+;/假如是完数,记录其个数;)printf(n%dnn,
48、m);return 0;心得:这个题重要考察了输入输出和循环问题,用while语句实现多行输入,首先输入两个数,判断这两个数之间的数(包括这两个数)是不是完数,假如是完数,则记录这两个数之间完数的个数,然后输出。24 问题 C:Fibbonacci Number _Hdu 2070时间限制:1 S ec内存限制:128 MB提交:291处理:164n irn题目描述Your objective for this question is to develop a program which will generate a fibbonaccinumber.The fibbonacci funct
49、ion is defined as such:f(0)=02)=1f(n)=f(n-l)+f(n-2)Your program should be able to handle values of n in the range 0 to 50输入Each test case consists of one integer n in a single line where 0 n 50.The input isterminated by-1.输出Print out the answer in a single line for each test case.样例输入345-1样例输出235提醒#
50、includeint mainQfloat a51;/定义一种浮点型一维数组;int n;a0=0;al=l;while(scanf(%dAn)!=EOF&n!=-l)/实现多行实例输入,当n等于-1时结束;for(int i=2;i=50;+i)ai=ai-l+ai-2;根据公式求出成果;printf(%.01fn,an);)return 0;)心得:这个题考察输入与输出,尚有首先定义一种浮点型一位数组,数组中第一种第二个数分别赋值为。和1,用while语句实现多行实例输入,然后执行for循环,根据公式算出所规定的成果,然后输出成果。25 问题 A:Packets时间限制:1 S ec内存限