您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > ACM第三次培训题目及答案
2075A|B?ProblemDescription正整数A是否能被正整数B整除,不知道为什么xhd会研究这个问题,来帮帮他吧。Input输入数据的第一行是一个数据T,表示有T组数据。每组数据有两个正整数A和B(A,B10^9)。Output对于每组输入数据,输出YES表示可以被整除,NO表示不能被整除。SampleInput24253SampleOutputYESNOAuthorxhdSourceACM程序设计期末考试_热身赛(感谢xhd&8600)Recommendlcy2014青年歌手大奖赛_评委会打分ProblemDescription青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。Input输入数据有多组,每组占一行,每行的第一个数是n(2n100),表示评委的人数,然后是n个评委的打分。Output对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。SampleInput39998974100999897SampleOutput98.0098.50AuthorlcySourceC语言程序设计练习(三)Recommendlcy2008数值统计ProblemDescription统计给定的n个数中,负数、零和正数的个数。Input输入数据有多组,每组占一行,每行的第一个数是整数n(n100),表示需要统计的数值的个数,然后是n个实数;如果n=0,则表示输入结束,该行不做处理。Output对于每组输入数据,输出一行a,b和c,分别表示给定的数据中负数、零和正数的个数。SampleInput60123-10512340.50SampleOutput123005AuthorlcySourceC语言程序设计练习(二)RecommendJGShining2017字符串统计ProblemDescription对于给定的一个字符串,统计其中数字字符出现的次数。Input输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。Output对于每个测试实例,输出该串中数值的个数,每个输出占一行。SampleInput2asdfasdf123123asdfasdfasdf111111111asdfasdfasdfSampleOutput69AuthorlcySourceC语言程序设计练习(三)Recommendlcy2020绝对值排序ProblemDescription输入n(n=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。Input输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。Output对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。SampleInput33-424012-30SampleOutput-432-3210AuthorlcySourceC语言程序设计练习(三)Recommendlcy2006求奇数的乘积ProblemDescription给你n个整数,求他们中所有奇数的乘积。Input输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数,你可以假设每组数据必定至少存在一个奇数。Output输出每组数中的所有奇数的乘积,对于测试实例,输出一行。SampleInput312342345SampleOutput315AuthorlcySourceC语言程序设计练习(一)RecommendJGShining2005第几天?ProblemDescription给定一个日期,输出这个日期是该年的第几天。Input输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sampleinput,另外,可以向你确保所有的输入数据是合法的。Output对于每组输入数据,输出一行,表示该日期是该年的第几天。SampleInput1985/1/202006/3/12SampleOutput2071AuthorlcySourceC语言程序设计练习(一)RecommendJGShining2015偶数求和ProblemDescription有一个长度为n(n=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列Input输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。Output对于每组输入数据,输出一个平均值序列,每组输出占一行。SampleInput3242SampleOutput3637AuthorlcySourceC语言程序设计练习(三)Recommendlcy2015问题分析ProblemAnalyse本题是为C语言初学者提供的。AlgorithmAnalyse解决这个问题,关键是要解决给出一个偶数X,求出从它开始连续的m个偶数的和而这个问题只要用等差数列求和公式就可以了。编码建议Programing从题目中可以看出,当这一组的第一个数是X时,下一组的第一个数就是X+2*m而从X开始连续m个偶数的和就是:{X+[X+2×(m-1)]}×m/2=(X+m-1)×m;所以平均数就是X+m-1#includestdio.hintmain(void){inti,n,m,b,c;while(scanf(%d%d,&n,&m)!=EOF){b=2;c=0;for(i=0;in/m;i++){printf(c++?%d:%d,b+m-1);b+=m*2;}printf(n%m?%d\n:\n,b+n%m-1);}return0;}2017问题分析ProblemAnalyse本题是为C语言初学者提供的。AlgorithmAnalyse因为本题只要求输出每一行数字的个数。所以不需要把那些字符记录下来。因此不需要开个字符数组去记录。而且如果你想开也不知道该开多大,因为题目中没有提示一行最多有几个。而判断行末就判断是否为'\n'就可以。编码建议Programing判断是否为数字,直接调用库函数isdigit();语法:#includectype.hintisdigit(intch);功能:如果参数是0到9之间的数字字符,函数返回非零值,否则返回零值.#includectype.h#includestdio.hintmain(void){intn,d;charc;scanf(%d%*c,&n);while(n--){for(d=0;(c=getchar())!='\n';){if(isdigit(c))d++;}printf(%d\n,d);}return0;}2020问题分析ProblemAnalyse本题是为C语言初学者提供的。AlgorithmAnalyse这题的考点就是排序。对初学者来说,比较熟悉的排序是“冒泡排序”和“选择排序”。在排升序的时候,元素比较用'',降序用''。对于整数等基本数据类型,这样的比较符号很容易理解。但换了其他比较规则,你是不是还能很好地理解呢?呵呵。就像本题的规则:比较数的绝对值的大小,在这里-31,所以就不能直接用'',而是要自己制定一套大小规则。刚开始可能不习惯看到-31这样的规则,熟悉后就好了。编码建议Programing你可以自己写一个判断大小的函数intcmp(a,b)如果ab返回大于0的值,a=b返回0,ab返回小于0的值ANSIC里的qsort()就是这样做的。用一个比较函数来提高排序函数的通用性。这里的比较规则就是returnabs(*b)-abs(*a);#includemath.h#includestdio.h#includestdlib.hintcmp(constint*a,constint*b){returnabs(*b)-abs(*a);}intmain(void){intn,i,x[101];while(scanf(%d,&n),n){for(i=0;in;i++)scanf(%d,x+i);qsort(x,n,sizeof(int),cmp);for(i=0;in;i++)printf(%d%c,x[i],(i!=n-1?'':'\n'));}return0;}2014问题分析ProblemAnalyse本题是为C语言初学者提供的。AlgorithmAnalyse要实现的算法是:求整个数组的和、在数组中找最值。找最值,可以先把第一个元素赋给max、min变量,做一次遍历,一一比较,把最大值存入max,最小值存入min。也可以直接对数组进行排序,然后从第二个加到倒数第二个,这样就可以了,省去减两个最值。编码建议Programing我的代码采用的是第一种方法。因为对于本题来说,它的效率是O(N)。算法不难,可以直接看代码这里稍微讨论一下第二种方法。对于排序,我们可以直接调用库函数qsort();语法:#includestdlib.hvoidqsort(void*buf,size_tnum,size_tsize,int(*compare)(constvoid*,constvoid*));功能:对buf指向的数据(包含num项,每项的大小为size)进行快速排序。如果函数compare的第一个参数小于第二个参数,返回负值;如果等于返回零值;如果大于返回正值。函数对buf指向的数据按升序排序。#include#includeintcmp(constdouble*a,constdouble*b){return*a*b?1:*a*b?-1:0;}intmain(void){intn,i;doublex,y[100];while(scanf(%d,&n)!=EOF){for(i=0;in;i++)scanf(%lf,y+i);qsort(y,n,sizeof(double),cmp);for(x=0,i=1;in-1;i++)x+=y[i];printf(%.2f\n,x/(n-2));}return0;}你可能有疑问,为什么cmp函数不直接用return*a-*b;这也就是我不打算用这种方法的原因了(虽然上面的代码可以Accpted),这就是这段代码的不稳定因素。我们来做个实验:#include#includeintmain(void){inti;doublex;x=0.123456;printf(%lf\n,x);for(i=0;x-floor(x);i++)x*=10;printf(%d\n,i);return0;}上面的代码的作用就是确定X小数点后有几位。我相信所有人都知道它有6位小数。但它的运行结果却是17(因编译器而异)。你可以自己复制代码去验证一下。我们在循环体里插入printf(%lf\n,floor(x));看看它的变化是怎样的。运行结果:1.00000012.000000123.0000001234.00000012345.000000123455.0000001234559.00000012345599.000000123455999.0000001234559999.00000012345599999.000000123455999999.0000001234559999999.00000012345599999999.000000123455999999999.0000001234559999999999.00000012345599999999998.000000这就是double型数据的精度问题。这是我们无法人为地控制的。所以建议尽量避免double的高精度运算。#includestdio.hintmain(void){intn,i;doublemin,max;doublex,y;while(scanf(%d,&n)!
本文标题:ACM第三次培训题目及答案
链接地址:https://www.777doc.com/doc-2900426 .html