您好,欢迎访问三七文档
二项式系数1.题目描述二项式系数C(n,k)因它在组合数学中的重要性而被广泛地研究。二项式系数可以如下递归的定义:C(1,0)=C(1,1)=1;C(n,0)=1对于所有n0;C(n,k)=C(n?1,k?1)+C(n?1,k)对于所有0k≤n。给出n和k,你要确定C(n,k)的奇偶性。2.输入输入包含多组测试数据。每组测试数据一对整数n和k(0≤k≤n231),占据独立一行。文件结束符(EOF)表示输入结束。3.输出对每组测试数据,输出一行,包含一个“0”或一个“1”,即C(n,k)除以2的余数。4.样例输入1110215.样例输出110#includestdio.hintfib(intn,intk){if(n==1&&(k2))return1;elseif(k==0)return1;elsereturnfib(n-1,k-1)+fib(n-1,k);}intmain(){intn,k;while(scanf(%d%d,&n,&k)!=EOF){printf(%d\n,fib(n,k)%2);}return0;}构造新的模运算1.题目描述给定整数a,b,n,要求计算(a^b)modn2.输入多组数据,每组数据一行,为三个用空格隔开的整数a,b,n1=a=40,0=b=3,1=n=5003.输出每组数据输出一行,为所求值4.样例输入2352245.样例输出30#includestdio.h#includemath.hintmain(){答案有错inta,b,n;while(scanf(%d%d%d\n,&a,&b,&n)!=EOF){printf(%d\n,(int)(pow(a,b))%n);}return0;}计算绩点1.题目描述学校对本科生的成绩施行平均学分绩点制(GPA)。将学生的实际考分根据不同的学科的不同学分按一定的公式进行计算。曾经使用的规定如下:实际成绩绩点90-1004.085-893.782-843.378-813.075-772.772-742.368-712.064-671.560-631.060以下01.一门课程的学分绩点=该课绩点*该课学分2.总评绩点=所有学科绩点之和/所有课程学分之和现要求你编写程序求出某人A的总评绩点(GPA)。2.输入第一行总的课程数n(n10);第二行相应课程的学分(两个学分间用空格隔开);第三行对应课程的实际得分;此处输入的所有数字均为整数。3.输出输出有一行,总评绩点,精确到小数点后2位小数。(printf(%.2f,GPA);)5.样例输入54342391887269566.样例输出2.52#includestdio.h#includemath.hintmain(){intn,i;floata[10],c[10],b[10],sum=0,GPA,d;scanf(%d,&n);for(i=0;i=n-1;i++)scanf(%f,&a[i]);for(i=0;i=n-1;i++){scanf(%f,&b[i]);if(b[i]=90)c[i]=4.0;elseif(b[i]=85)c[i]=3.7;elseif(b[i]=82)c[i]=3.3;elseif(b[i]=78)c[i]=3.0;elseif(b[i]=72)c[i]=2.3;elseif(b[i]=68)c[i]=2.0;elseif(b[i]=64)c[i]=1.5;elseif(b[i]=60)c[i]=1.0;elseb[i]=0;}for(i=0;i=n-1;i++)sum+=a[i]*c[i];for(i=0;i=n-1;i++)d+=a[i];GPA=sum/d;printf(%.2f,GPA);return0;}将字符串中的小写字母转换成大写字母1.题目描述给定一个字符串,将其中所有的小写字母转换成大写字母2.输入一个字符串3.输出将输入的字符串中所有小写字母转换成大写字母后的字符串4.样例输入helloworld123Ha5.样例输出HELLOWORLD123HA#includestdio.h#defineN100intmain(){inti;charc,str[N];gets(str);i=0;while(str[i]!='\0'){if(str[i]='a'&&str[i]='z'){str[i]=str[i]-32;}i++;}puts(str);return0;}日历问题1.题目描述在我们现在使用的日历中,闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。例如:1700,1800,1900和2100不是闰年,而1600,2000和2400是闰年。给定从公元2000年1月1日开始逝去的天数,你的任务是给出这一天是哪年哪月哪日星期几。2.输入输入包含若干行,每行包含一个正整数,表示从2000年1月1日开始逝去的天数。输入最后一行是?1,不必处理。可以假设结果的年份不会超过9999。3.输出对每个测试样例,输出一行,该行包含对应的日期和星期几。格式为“YYYY-MM-DDDayOfWeek”,其中“DayOfWeek”必须是下面中的一个:Sunday,Monday,Tuesday,Wednesday,Thursday,Friday或Saturday“。4.样例输入1730174017501751-15.样例输出2004-09-26Sunday2004-10-06Wednesday2004-10-16Saturday2004-10-17Sunday6.提示2000.1.1.是星期六#includestdio.hinttype(int);charweek[7][10]={saturday,sunday,monday,tuesday,wednesday,thursday,friday};intyear[2]={365,366};intmonth[2][12]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31};intmain(void){intdays,dayofweek;inti=0,j=0;while(scanf(%d,&days)&&days!=-1){dayofweek=days%7;for(i=2000;days=year[type(i)];i++)days-=year[type(i)];for(j=0;days=month[type(i)][j];j++)days-=month[type(i)][j];printf(%d-%02d-%02d%s\n,i,j+1,days+1,week[dayofweek]);}return0;}inttype(intm){if(m%4!=0||(m%100==0&&m%400!=0))return0;elsereturn1;}求平均年龄1.题目描述班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位2.输入第一行有一个整数n(1=n=100),表示学生的人数。其后n行每行有1个整数,取值为15到25。3.输出输出一行,该行包含一个浮点数,为要求的平均年龄,保留到小数点后两位。4.样例输入218175.样例输出17.506.提示要输出浮点数、双精度数小数点后2位数字,可以用下面这种形式:printf(%.2f,num);#includestdio.hintmain(){intn,i,sum,age;doublenum;scanf(%d,&n);for(i=0,sum=0;in;i++){scanf(%d,&age);sum+=age;}num=(double)sum/n;printf(%.2f,num);return0;}数制转换1.题目描述将十进制数转换成指定的进制数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()定义在stdlib.h中#includestdio.h#includestdlib.h#defineN500intmain(){inta[N],n,i,m,p,r,s,t;scanf(%d,&n);for(i=0;in;i++){scanf(%d,&a[i]);}p=m=a[0];for(i=1;in;i++){if(ma[i])m=a[i];if(pa[i])p=a[i];}s=abs(abs(a[0]-p)-abs(a[0]-m));t=a[0];for(i=1;in;i++){r=abs(abs(a[i]-p)-abs(a[i]-m));if(sr){s=r;t=a[i];}}printf(%d,t);return0;}登山1.题目描述五一到了,NUIST-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?2.输入Line1:N(2=N=1000)景点数Line2:N个整数,每个景点的海拔3.输出最多能浏览的景点数4.样例输入81861861502001601301972205.样例输出4#includestdio.hintf(inta[1000],intn);intmain(){intn,a[1000],i,m;scanf(%d,&n);for(i=0;in;i++){scanf(%d,&a[i]);}m=f(a,n);printf(%d,m);return0;}intf(inta[1000],intn){inti,j=1,s,m,b[1000];for(m=n;m0;m--){for(i=1;im;i++){if(a[i]a[i-1]){j++;}for(i=m-1;in-1;i++){if(a[i]a[i+1]){j++;}}}b[n-m]=j;j=1;}s=b[0];for(i=1;in;i++){if(sb[i]){s=b[i];}}returns;}计算多项式的值1.题目描述多项式f(x)=ax3+bx2+cx+d2.输入输入仅一行,分别是x,及参数a、b、c、d的值,每个数都是双精度浮点数。3.输出输出也仅一行,f(x)的值,保留小数点后7位。4.样例输入2.311.22235.样例输出33.08386926.提示使用printf(%.7lf,...)实现保留小数点后7位。#includestdio.hintmain(){doublex,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);return0;}计算两个分数的和1.题目描述输入两个分数,形式如1/2,计算它们的和,以分数形式输出2.输入第一行为第一个分数第二行为第二个分数3.输出两个分数的和4.样例输入1/23/45.样例输出5/4#includestdio.hintmain(void){inta,b,c,d,m,n,i=2;scanf(%d/%d,&a,&b);scanf(%
本文标题:ACM题库完整版
链接地址:https://www.777doc.com/doc-6055993 .html