2022年ACM程序设计与竞赛作业要点_第1页
2022年ACM程序设计与竞赛作业要点_第2页
2022年ACM程序设计与竞赛作业要点_第3页
2022年ACM程序设计与竞赛作业要点_第4页
2022年ACM程序设计与竞赛作业要点_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ACM程序设计与竞赛作业.采药.金字塔问题.毛毛虫问题.HammingProblem.字符串正反连接.去掉空格.成绩转换.金块问题.工资问题.“水仙花数”问题.大小写转换.取数游戏.整除问题.警察抓小偷.nl.汉诺塔问题.猴子吃桃问题(递归).A+BforInput-OutputPractice①.A+BforInput-OutputPractice(II).A+BforInput-OutputPractice(III).A+BforInput-OutputPractice(TV)

.埃及分数.完数.FibbonacciNumber_Hdu2070.Pakets.不要62_Hdu20891问题B:采药时间限制:1Sec内存限制:128MB提交:87处理:72ODD题目描述辰辰是个很有潜能、天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一种难题。医师把他带到个到处都是草药的山洞里对他说:“孩子,这个山洞里有某些不一样的草药,采每一株都需要某些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到某些草药。假如你是一种聪颖的孩子,你应当可以让采到的草药的总价值最大。”假如你是辰辰,你能完毕这个任务吗?输入输入的第一行有两个整数T(1<T<1000)和M(1<M<100),T代表总共可以用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和10。)的整数,分别表达采摘某株草药的时间和这株草药的价值。

输出输出只包括一行,这一行只包括一种整数,表达在规定的时间内,可以采到的草药的最大总价值。样例输入7037110069112样例输出3#include"stdio.h"voidmain。(inta[102][1002]={0};intt,tl,m1J1,k=1;scanf(,,%d%dn,&t,&m);scanf(n%d%dn,&tl,&ml);= =t;il++)〃处理第一行(if(il>=tl)a[k][il]=ml;k++;

for(i=2;i<=m;i++){scanf("%d%d",&tl,&ml);fbr(il=lul<=t;il++){if(il<tl)〃不也许采的状况;a[k][il]=a[k-l][il];else〃可以采的状况{a[k][il]=a[k-l][il];〃采完总价值下降else〃值得采的状况;))k++;)printf("%d",a[m][t]);)心得:这是一种动态规划的题目,首先定义一种二维数组,根据草药的性价比,优先采用较高的草药,假如时间不够,则减少性价比继续采用草药,直至时间结束,根据采集的草药计算它的最大值,这题通过比较算出也许采的状况,和不能采的状况,假如能采,那再判断值不值得采,得出最优解。

2问题A:金字塔问题时间限制:1Sec内存限制:128MB提交:54处理:32ODD题目描述IC7 /O年IG给一种金字塔,如上图所示,请你求出一种从塔顶到塔底的途径,规定途径通过的点的数字和最小。例如上图所示的金字塔的最小途径为:40输入输入第一行是一种整数n<1000;接下来是n行,第一行一种数;第二行两个数;

第n行n个数;数之间用空格分开。数的链接方式如图所示。输出一种数,就是从塔顶到塔底的途径的最小距离。样例输入59121510683189519710416样例输出40#include<stdio.h>voidmainQ(inti,j,n;inta[l00][100];定义一种二维数组;scanf(n%dn,&n);for(i=l;i<=n;i++)

for0=l;j<=i;j++)scanf("%d",&a[i][j]);)for(i=n-l;i>=l;i-)for(j=1;j<=i;j++)〃从最终一行开始处理;{if(a[i+l][j]>a[i+l]D+l])a所产a所]+a[i+l][j+l];elsea「加尸a皿j]+a[i+l][j];〃求得每次途径最小值;}printfC%d",a[l][l]);)心得:这个题目重要运用了动态规划的思想,定义一种二维数组,把所输入的数据存入进去,然后从它的第一行处理,比较相邻位置数的大小,取最小的途径和上一行对应的数相加,获得最小途径,进行循环,直到求出数组中a⑴川,即所求的成果。3问题B:毛毛虫问题时间限制:1Sec内存限制:128MB提交:32处理:16onn

题目描述Mary在她家门口水平种了一排苹果树,共有N棵。忽然Mary发目前左起第P棵树上(从1开始计数)有一条毛毛虫。为了看到毛毛虫变蝴蝶的过程,Lele在苹果树旁观测了很久。虽然没有看到蝴蝶,但Lele发现了一种规律:每过1分钟,毛毛虫会随机从一棵树爬到相邻的一棵树上。例如刚开始毛毛虫在第2棵树上,过1分钟后,毛毛虫也许会在第1棵树上或者第3棵树上。假如刚开始时毛毛虫在第1棵树上,过1分钟后来,毛毛虫一定会在第2棵树上。目前告诉你苹果树的数目N,以及毛毛刚开始所在的位置P,请问,在M分钟后,毛毛虫抵达第T棵树,一共有多少种行走方案数。输入输入四个整数NPMT。输出输出一种整数,就是行走的方案数。样例输入7444样例输出6#include<stdio.h>voidmain。{inti,j;

inta[l00][100]={0};〃定义一种二维数组;scanf("%d%d%d%d",&n,&p,&m,&t);a⑼旧=1;毛毛虫刚开始在数组中的位置;for(i=l;i<=m;i++){for(j=l;j<=n;j++){a所产a[i-l][j-l]+a[i-l][j+l];〃每一步的方案数;printfC%d\n",a[m][t]);M分钟后到T棵树行走的方案数;)心得:这一题运用了动态规划的思想,毛毛虫的每一步都会影响下一步的成果,因此首先按照一般状况找出规律及其其公式,进而算出方案数。首先定义一种二维数组,初始化毛毛虫的起始位置,然后通过两个循环,求出毛毛虫走每一步的方案数,存在二维数组中,然后求出第M分钟到T棵树行走的方案数。4问题A:HammingProblem时间限制:1Sec内存限制:128MB提交:61处理:23DDD题目描述

Foreachthreeprimenumberspl,p2andp3,let'sdefineHammingsequenceHi(pl,p2,p3),i=l,...ascontaininginincreasingorderallthenaturalnumberswhoseonlyprimedivisorsarepl,p2orp3.Forexample,H(2,3,5)=2,3,4,5,6,8,9,10,12,15,16,18,20,24,25,27,...SoH5(2,3,5)=6.输入Inthesin日elineofinputfiletherearespace-separatedintegersplp2p3i.输出Theoutputfilemustcontainthesingleinteger-Hi(pl,p2,p3).Allnumbersininputandoutputarelessthan10^18.样例输入2355样例输出6#include"stdio.h”intminx(intpl,intp2,intp3)//定义有参函数minx;(intmin=pl;if(p2<min)min=p2;

min=p3;returnmin;}〃求pl,p2,p3的最小值;intmainQ{intpl,p2,p3,t,i;inta,b,c;charnum[10000];scanf(n%d%d%d%dn,&pl,&p2,&p3?&t);a=b=c=0;num[0]—1;for(i=l;iv=t;i++){num[i]=minx(pl*num[a],p2*num[b],p3*num[c]);/minx函数;if(num[i]==p1*num[a])a++;if(num[i]==p2*num[b])b++;if(num[i]==p3*num[c])c++;}求所有的能被pl,p2,p3整除的数;printf("%d\n",num[t]);return0;

心得:运用动态规划的思想,定义一种一维数组,把所有符合条件的数按次序存进一维数组中,这个编程运用了函数调用的措施求三个数的最小值,然后把这个最小值存进一维数组中,每次存进一种数,下次都会用存进去日勺这个数求解下一种数,进行循环。5问题B:字符串正反连接时间限制:1Sec内存限制:128MB提交:68处理:42non题目描述所给字符串正序和反序连接,形成新串并输出输入任意字符串(长度<二50)输出字符串正序和反序连接所成的新字符串样例输入123abc样例输出123abccba321#include<stdio.h>#include<string.h>voidrnainQ

chara[50];〃定义一种字符串;inti,f;while(scanf("%s",&a)!=EOF)〃实现多行实例输入;{f=strlen(a);〃把字符串的长度值赋给f;for(i=O;i<f;i++){printf,%c”,a[i]);〃把字符串正序输出;)for(i=f-l;i>=O;i-)(printfC%c”,a[i]);〃把字符串反序输出;)printf("\n");))心得:定义一种字符串,运用strlenO函数获取字符串的长度值f,首先用for循环,把这个字符串正序输出,然后再用for循环对这个字符串进行反序输出,这里重要考察了输入输出。6问题C:去掉空格

时间限制:1Sec内存限制:128MB提交:27处理:4ODD题目描述读入某些字符串,将其中的空格去掉。输入输入为多行,每行为一种字符串,字符串只由字母、数字和空格构成,长度不超过80o输入以"Endoffile"结束。输出对于每行输入,输出转换后的字符串。样例输入HelloWorld123Nicetomeetyouabc样例输出HelloWorld123Nicetomeetyouabc提醒

用scanf是不能读入一行有空格的字符串的,用gets吧。用“gets(str)!二NULL”可以判断输入与否结束,假如此条件为假(即gets(str)==NULL),则表达输入结束(对于本题)。#include<stdio.h>#include<string.h>voidmainQ(inti,f;chara[90];〃定义一种字符串;while(gets(a)!=NULL)(f=strlen(a);〃把字符串的长度值赋给f;for(i=O;i<f;i++)(if(a[i]==')(print,%c”,a[i+l]);〃去掉空格;i=i+l;}elseprint-%c",a[i]);〃没有空格,直接输出;)

心得:这里也是重要考察输入输出问题,首先也是定义了一种字符串,用strlenO函数获得字符串的长度f,进行f次循环,判断这个字符串与否有空格?假如有把数组中的每个数往后进一位,即去点空格,假如没有直接输出。7问题D:成绩转换时间限制:1Sec内存限制:128MB提交:78处理:30ODD题目描述输入一种百分制的成绩t,将其转换成对应的等级,详细转换规则如下:90-100为A;80-89为B;70-79为C;60-69为D;0~59为E;输入输入数据有多组,每组占一行,由一种整数构成。输出对于每组输入数据,输出一行。假如输入数据不在。〜1。。范围内,请输出一行:“Scoreiserror!o样例输入

5667100123样例输出EDAScoreiserror!提醒#include<stdio.h>intmainQ{intx;while(scanf(”%d”,&x)!=EOFy/实现多行实例输入;(if(x<60)printf("E\n");elseif(x<70)printf("D\n");elseif(x<80)printf("C\n");elseif(x<90)

elseif(x<=100)printf("A\n");elseprintf("Scoreiserror!\n");}〃分数转换为等级;return0;)心得:这里重要运用了选择语句,用while(scanf("%d",&x)!=EOF)语句实现多行实例输入,然后把所输入的分数通过if语句进行判断,转换成对应的等级,输出。8问题A:金块问题时间限制:1Sec内存限制:128MB提交:92处理:71ODD题目描述老板有一袋金块(共n块,n是2的幕(n>=2)),最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻的一块。假设有一台比较重量的仪器,但愿用至少的比较次数找出最重和最轻的金块。输入输入共两行,第一行输入金块日勺数量N<100000;

第二行N金块的重量,用空格间隔。输出两个数用空格分开,最重金块最轻金块样例输入537964样例输出93#include<stdio.h>intmainQ{intn,a[l00000];intmax,min,i;while(scanf("%d",&n)!=EOF)〃实现多行实例输入;(for(i=0;i<n;i++)scanf(n%dM,&a[i]);max二min=a[0],/把数组a[0]的值赋给max和min;for(i=l;i<n;i++)(if(a[i]>max)max=a[i];}〃求最最重的金块;

if(a[i]<min)min=a[i];}〃求最轻的金块;printf(n%d%d\nn,max,min);)return0;)心得:这题重要运用分治算法的思想,把一种大问题提成一种个小的子问题去求解,这个题目是经典的二分法问题,把这个题提成两个小问题,即求最重的和求最轻的金块,首先定义了一种一维数组,把所有金块的质量存入其中,把数组的初始值赋给最重的和最轻的金块,然后运用循环对数组中每个金块的质量与金块的初始值进行比较,求的最重和最轻的金块,然后输出。9问题B:工资问题时间限制:1Sec内存限制:128MB提交:121处理:74ODD题目描述某单位给每个职工发工资(精确到元),为了保证不要临时兑换零钱,且取款的张数至少,取工资前要记录出所有职工的工资所需多种币值(100,50,20,10,5,2,1元共7种)的张数,请编程完毕。输入输入一种工资数<10000元输出输出各个币种的张数,没有的用0替代,中间用空格分开样例输入173样例输出1110011#include<stdio.h>intmainQ{intj,z,a;intb[7]={100,50,20,10,5,2,1};〃把所有币值按从从大到小的次序存到一位数组中;ints[7]={0};〃定义一种一位数组,元素值全为0;scanf("%d",&z);for(j=0;j<7;j++)(a=z/bO];s[j]=a;z=z-a*b[j];”/求需要各个币值的个数;printf("%d",s[0]);for(j=l;j<7;j++)printf("%d",s[j]);〃输出需要各个币值的个数;return0;心得:这个题重要运用贪婪算法的措施,运用可行的方略,求出可行解的一种解元素由所有解元素合成问题的一种可行解。要想获得的张数至少,可以先考虑币值最大的进行分发,然后再取更小现金的币值。依次取之。首先定义一种一维数组,把币值从大到小存进去,运用一循环,把每次算的钱数的成果,依次对数组的币值进行取整。然后依次存入数组输出。10问题C:"水仙花数”问题I时间限制:1Sec内存限制:128MB提交:138处理:75DDD题目描述判断一种数与否为”水仙花数",所谓"水仙花数"是指这样的一人数:其各位数字的立方和等于该数自身。例如:371是一种"水仙花数",371=3八3+7人3+1八3.输入一种三位数输出1或者0(1代表此数为水仙花数,0代表此数不是水仙花数)样例输入371

#include<stdio.h>voidmainQ{intn,x,y,z;scanf(n%dn,&n);x=n/100;〃求三位数的百位数字;z=n%10;〃求三位数的个位数字;y=(n-(x*100+z))/10;〃求三位数的十位数字;if(n==x*x*x+y*y*y+z*z*z)printfC'%d",l);elseprintfe%d",O);〃判断这个三位数与否为水仙花数,是输出1,否输出2;)心得:首先,输入一种三位数,运用对这个数取整,取余,运用数学公式,分别算出它的百位,十位,和个位的数字,然后判断这三个数字的平方和与否等于这个三位数,假如是,输出1,假如不是输出0.11问题E:大小写转换时间限制:1000Sec内存限制:65536MB提交:182处理:116onn

题目描述读入某些字符串,将其中的小写字母转成大写字母(其他字符不变)。输入输入为多行,每行为一种字符串,字符串只由字母和数字构成,长度不超过80。输入以“Endoffile”结束。输出对于每行输入,输出转换后的字符串。样例输入HelloICPC12345abcde样例输出HELLOICPC12345ABCDE#include<stdio.h>#include<string.h>voidmain。intj;charstring[80];〃定义一种字符串;while(scanfC'%s",&string=EOF)〃实现多行实例输入;

for(j=0;j<80;j++)if((string[j]>='a')&&(stringfj]<=*z*))string。]=string。]-32;}〃实现字母大小写转换;printf("%s\n",string);})心得:这个题目重要考察输入输出,尚有大小写转换问题,首先还是定义一种字符串,用while(scanf("%s”,&strin0!=EOB语句实现多行实例输入,对这个字符串进行循环,假如这个字符串有大写的话,转化成小写的,假如有小写的话,那么转化成大写叽12问题B:取数游戏时间限制:1Sec内存限制:128MB提交:46处理:39ODD题目描述有2个人轮番取2n个数中的n个数,所取数之和大者为胜,请编写算法,让先取数者胜,模拟取数过程。输入输入两行,第一行一种整数N<100000;第二行N个数,用空格分开。输出输出取胜人取数和。失败人取数的和,空格分开。样例输入6123456样例输出129#include<stdio.h>intmainQ(intn,i,sum1,sum2,a[100000];while(scanf("%d",&n)!=EOF)〃实现多行实例输入;(suml=sum2=0;for(i=0;i<n;i++)scanf(H%dH,&a[i]);for(i=0;i<n;i=i+2)suml=suml+a[i];for(i=l;i<n;i=i+2)sum2=sum2+a「];//隔数取数求和:suml,sum2;if(suml>sum2)

printf("%d%d\n",suml,sum2);elseprintf("%d%d\n",sum2,suml);}〃次序输出取胜人取数和。失败人取数和;return0;)心得;这题重要运用贪心算法的思想,要想先取数人获胜,就得让这个人每一步都尽量获得最大的数,这样他取数的和才会总体不小于后取数的那个人的取数和。首先定义一种一维数组,把要获得数从小到大的次序放在里面,然后一种人从第一种按照隔一种数取,求和suml;另一种人从第二个按照隔一种人取,求和sum2,比较suml和sum2的最大值,输出。13问题C:整除问题时间限制:1Sec内存限制:128MB提交:70处理:44ODD题目描述编写算法对输入的一种整数,判断它能否被3,5,7整除,并输出如下信息之一:能同步被3,5,7整除;能被其中两个数(要指出哪两个)整除;能被其中一种数(要指出那一种)整除;不能被3,5,7任一种整除;

输入输入一种整数<100000;输出假如都能整除输出“如"假如都不能整除输出"none-假如能被3和5整除则输出“35”。中间有一种空格,注意按由小到大输出。样例输入35样例输出57#include<stdio.h>voidmainQ{longn;intk;scanf(M%dH,&n);k=((n%3==0)+(n%5==0)*2+(n%7==0)*4);〃判断整数与否能被2,3,5整除;switch(k){case7:printf("alln);break;case6:printf(M57");break;case5:printf(n37");break;case4:printf(n4n);break;

case3:printf(n35n);break;case2:printf(M5n);break;case1:printf(H3H);break;caseO:printf(nnonen);break;}〃用switch语句输出成果;)心得:这题重要考察输入输出问题,首先输入一种整数,运用语句k=((n%3==0)+(n%5==0)*2+(n%7==0)*4),判断这个数能否被2,3,5整除,用switch语句输出所有也许发生的成果,然后输出题目中所规定输出的成果,其中用switch语句起到了优化算法的作用。14问题A警察抓小偷时间限制:1Sec内存限制:128MB提交:115处理:88ODD题目描述警察局抓了a,b,c,d,4名小偷嫌疑犯,其中只有一种人是小偷,审问中,a说:我不是小偷,b说:c是小偷,c说:小偷肯定是d,d说:c在冤枉人。目前已经懂得4个人中3人说的是真话,一人说的是假话,问究竟谁是小偷。输入输出小偷是c样例输入样例输出

小偷是c#include<stdio.h>voidmainQ{intx;for(x=l;x<=4;x++)〃执行4次循环;if(((x!=l)+(x==3)+(x==4)+(x!=4))==3)〃判断与否有三个人说真话的状况;printf(H%cn,64+x);)心得:这个题目重要考察把文字信息转化为数字信息,即信息数字化,把A,B,C,D当作1,2,3,4;x定义为小偷,然后把A,B,C,D四人所说的话变成数字语言,判断当他们四个人有三个人说真话的状况,然后以把数字变成字母输出。15问题B:n!时间限制:1Sec内存限制:128MB提交:262处理:162ODD题目描述输入一种整数N,输出它的阶乘。输入输入一种整数<20;输出输出它的阶乘

样例输入5样例输出120提醒#include<stdio.h>intmainQ(intadd(intm);〃对add函数进行申明;intn,sum;scanff'%d",&n);sum=add(n);printf("%d\n",sum);return0;)intadd(intn)〃定义add函数(intf;if(n==01|n==l)(f-1;"/判断当n等于。和1这两种状况;elsef=n*add(n-l);〃调用add函数求值;

returnf;心得:这里重要运用函数的递归调用,首先用if对输入的数进行判断,看与否为1和0,假如是,那么输出其阶乘等于1,假如不是那么调用函数f=n*add(n-l)进行求值,add函数总共被调用了n次,求得最终的成果,输出。16汉诺塔问题时间限制:1Sec内存限制:128MB提交:224处理:138ODD题目描述把N个盘子从A柱子借助B柱子移到C柱子,规定每次只能移动一种盘子,并且小盘子不能放到大盘子上。问怎样移动。输入输入盘子的个数N(<=10)输出输出移动的次数。样例输入3样例输出7提醒#include<stdio.h>intmainQ

inti,j,n,sum;scanf("%d",&n);i=i;if(n!=l)〃清除盘子的个数为1的状况;{for(i=l;i<=n;i++){j=j*2;)sum41;〃求盘子移动的次数;)elsesum=l;printf("%d",sum);return0;)心得:这题重要考察循环与递归问题,先假设盘子的个数,取几种特殊值,找出移动盘子次数的规律。这个编程首先判断盘子个数,假如是1,则输出1次,假如不是1,执行n次循环,求得j,然后求出移动盘子的次数j-1,输出。17问题D:猴子吃桃子问题(递归)

时间限制:1Sec内存限制:128MB提交:98处理:87nno题目描述一只猴子摘了若干桃子,每天吃既有桃子的二分之一多一种,到第1。天时就只有一种桃子了,求本来有多少个桃。输入输出输出本来的桃子数样例输入样例输出提醒#include<stdioth>intmainQ{inti,x=l;for(i=9;i>0;i-)〃执行9次循环;x=(x+l)*2;〃求每天桃子的个数;printf(n%d\n",x);return1;)心得:这个题目运用数学中倒推的措施求得,先求出第10天桃子的个数,然后再求

出前一天桃子的个数,直到求出第1天桃子的个数,找出其规律。设桃子的个数为X,

则每天剩余桃子的个数满足公式x=(x+l)*2,再用一种for循环求出本来的桃子数。18问题A:A+BforInput-OutputPractice①

时间限制:1Sec内存限制:128MB

提交:402处理:183ODD题目描述YourtaskistoCalculatea+b.Tooeasy?!Ofcourse!Ispeciallydesignedtheproblemforacmbeginners.Youmusthavefoundthatsomeproblemshavethesametitleswiththisone,yes,alltheseproblemsweredesignedforthesameaim.输入Theinputwillconsistofaseriesofpairsofintegersaandb,separatedbyaspace,onepairofintegersperline.输出Foreachpairofinputintegersaandbyoushouldoutputthesumofaandbinoneline,andwithonelineofoutputforeachlineininput样例输入151020样例输出

30提醒#include<stdio.h>voidmainQ{inta,b,s;while(scanf("%d%d",&a,&b)!=EOF)〃实现多行实例输入;(s=a+b;〃求a和b的和;printf("%d\n",s);心得:这个题重要考察了输入和输出问题,目的是计算整数a和b的和,首先用while(scanf("%d%d",&a,&b)!=EOS语句实现多行实例输入,然后求出a和b的和,输出。19A+BforInput-OutputPractice(II)

时间限制:1Sec内存限制:128MB提交:310处理:179ODD题目描述YourtaskistoCalculatea+b.输入InputcontainsanintegerNinthefirstline,andthenNlinesfollow.Eachlineconsistsofapairofintegersaandb,separatedbyaspace,onepairofintegersperline.输出Foreachpairofinputintegersaandbyoushouldoutputthesumofaandbinoneline,andwithonelineofoutputforeachlineininput样例输入2151020样例输出630提醒onn

#include<stdio.h>voidmain。(inta,b,n;scanf(n%dn,&n);while(n-)〃限制求和的次数;(scanfC%d%d”,&a,&b);〃输入a,b;printf(*'%d\n",a+b);〃求a,b的和;))心得:这个题目重要考察了输入输出问题,题目规定第一行输入要输入要计算和的数量,用while(n-)语句满足了题目的规定,即执行n次,然后就是输入a和b,接着求出和,输出。20可题C:A+BforInput-OutputPractice(III)时间限制:1Sec内存限制:128MB提交:314处理:169ODD题目描述YourtaskistoCalculatea+b.输入

Inputcontainsmultipletestcases.Eachtestcasecontainsapairofintegersaandb,onepairofintegersperline.Atestcasecontaining00terminatestheinputandthistestcaseisnottobeprocessed.输出Foreachpairofinputintegersaandbyoushouldoutputthesumofaandbinoneline,andwithonelineofoutputforeachlineininput样例输入15102000样例输出630#include<stdio.h>voidmain。{inta,b;while(scanf(”%d%d”,&a,&b)!=EOF&&!(a==0&&b==0))/*实现多行实例输入,当a,b都为。时结束*/printf("%d\n",a+b);〃求a,b附和;

心得:这个题目也是输入输出问题,目的也是求出a和b的和,然后按规定输入输出,对于输入:while(scanf("%d%d”,&a,&b)!=EOF&&!(a==0&&b==0))运用这个语句实现多行实例输入,假如输入。。,则结束,然后求得a和b的和,输出。21问题D:A+BforInput-OutputPractice(IV)

时间限制:1Sec内存限制:128MB提交:287处理:166ODD题目描述YourtaskistoCalculatethesumo£someintegers.输入Inputcontainsmultipletestcases.EachtestcasecontainsaintegerN,andthenNintegersfollowinthesameline.Atestcasestartingwith0terminatestheinputandthistestcaseisnottobeprocessed.输出Foreachgroupofinputintegersyoushouldoutputtheirsuminoneline,andwithonelineofou中utforeachEneininputSampleInput

样例输入410234051128550样例输出5531提醒#include<stdio.h>voidmainQ{inta,s;intn=l;while(n!=0){scanf(n%dn,&n);if(n==0)break;//判断n与否为断。,是结束,不是执行下面语句;s=0;for(inti=0;i<n;i++)〃执行n次循环;(scanfff%dn,&a);s=s+a;〃每次循环求和;

printf(n%d\nn,s);心得:同样,这个题目也是重要考察了输入输出问题,计算某些整数的和,并按指定的格式输出,首先输入某些整数判断与否都为0,假如是,则结束,假如不是则执行循环,把所有输入的整数相加,然后输出。22问题B:埃及分数时间限制:1Sec内存限制:128MB提交:21处理:11ODD题目描述设计一种算法,把一种真分数表达为至少埃及分数之和的形式,所谓埃及分数,是指分子为1的分数。如7/8=1/2+1/3+1/24。输入输入两个整数,第一种表达分子,第二个数表达分母。输出输出埃及分数之和,按分母有小到大的次序,中间用空格分开。样例输入78样例输出2324提醒#include<stdio.h>intmainQ{inta,b,c;while(scanf("%d%d',,&a,&b)!=EOF)//实现多行实例输入;{if(a==l||b%a==O)printf("%d\n",b/a);〃假如这个数为1或分子为1,输出分母的值;while(a!=l)(c=b/a+1;a=a*c-b;b=b*c;printf("%d",c);〃通过公式求出埃及分数。if(b%a==O||a==l)(printf("%d\n",b/a);a=l;)return0;

心得:首先通过while语句实现多行实例输入,首先输入这是分数的的分子分母,判断这个数与否为1或这个数的分子为1,假如是,直接输出分母的值;接下来用一while循环,通过求公式依次算出埃及数,然后输出,用每次计算的成果判断分子与否能整除分母或分子为一,假如是,直接输出整除后成果。23问题A:完数时间限制:1Sec内存限制:128MB提交:192处理:70ODD题目描述完数的定义:假如一种不小于1的正整数的所有因子之和等于它的自身,则称这个数是完数,例如6,28都是完数:6=1+2+3;28=1+2+4+7+14。本题的任务是判断两个正整数之间完数的个数。输入输入数据包括多行,第一行是一种正整数n,表达测试实例的个数,然后就是n个测试实例,每个实例占一行,由两个正整数numl和num2^JJ^,(l<numl,num2<10000)o输出对于每组测试数据,请输出numl和num2之间(包括numl和num2)存在的完数个数。样例输入22557样例输出

01提醒#include<stdio.h>intmainQ{intn,numl,num2,sum,m,i;intj,k;while(scanf("%d",&n)!=EOF)〃实现多行实例输入;(for(i=0;i<n;i++)〃执行n次循环;(scanf("%d%d",&numl,&num2);〃输入两个整数;m=0;for(j=numl;j<=num2;j++)〃执行num2-numl+l次循环;{sum=O;for(k=l;k<j;k++)(if(j%k==O)〃判断numl和num2之间时数与否能被k整除;sum=sum+k;)if(sum==j)m++;〃假如是完数,记录其个数;)

printf(H%d\nn,m);return0;)心得:这个题重要考察了输入输出和循环问题,用while语句实现多行输入,首先输入两个数,判断这两个数之间的数(包括这两个数)是不是完数,假如是完数,则记录这两个数之间完数的个数,然后输出。24可题C:FibbonacciNumber_Hdu2070时间限制:1Sec内存限制:128MB提交:291处理:164ODD题目描述Yourobjectiveforthisquestionistodevelopaprogramwhichwillgenerateafibbonaccinumber.Thefibbonaccifunctionisdefinedassuch:f(0)=0O=1f(n)=f(n-l)+f(n-2)Yourprogramshouldbeabletohandlevaluesofnintherange0to50

输入Eachtestcaseconsistsofoneintegerninasinglelinewhere0<n<50.Theinputisterminatedby-1.输出Printouttheanswerinasinglelineforeachtestcase.样例输入345-1样例输出235提醒

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论