ACM题库完整版
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数制转换
1.题目描述 将十进制数转换成指定的进制数 2.输入 第一行输入一个正整数n,表示需要转换的进制数 第二行输入一个十进制正整数 3.输出 转换成n进制的数 4.样例输入 6 90 5.样例输出 230
数的距离差
1.题目描述 给定一组正整数,其中的最大值和最小值分 别为max和min,其中的一个数x到max和 min的距离差D定义为 abs(abs(x-max) - abs(x-min))。 其中,abs()表示求一个数的绝对值 2.输入 输入第一行为整数n,剩余n行每行一个正整 数。 3.输出 输出仅一行,它的值为使得距离差D最小的x 4.样例输入 5 3 1 7 5 9 5.样例输出 5 6.提示 函数abs()定义在stdlib.h中
if(p<a[i])
p=a[i]; } s=abs(abs(a[0]-p)-abs(a[0]-m)); t=a[0]; for(i=1;i<n;i++) { r=abs(abs(a[i]-p)-abs(a[i]m)); if(s>r) { s=r; t=a[i]; } } printf("%d",t); return 0; }
将字符串中的小写 字母转换成大写字 母
1.题目描述 给定一个字符串,将其中所有的小写 字母转换成大写字母 2.输入 一个字符串 3.输出 将输入的字符串中所有小写字母转换 成大写字母后的字符串
#include<stdio.h> #define N 100 int main() { int i; char c,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); return 0;
求平均年龄
1.题目描述 班上有学生若干名,给出每名学生的年 龄(整数),求班上所有学生的平均年 龄,保留到小数点后两位 2.输入 第一行有一个整数n(1<= n <= 100), 表示学生的人数。其后n行每行有1个整 数,取值为15到25。 3.输出 输出一行,该行包含一个浮点数,为要 求的平均年龄,保留到小数点后两位。 4.样例输入 2 18 17 5.样例输出 17.50 6.提示 要输出浮点数、双精度数小数点后2位数 字,可以用下面这种形式: printf("%.2f", num); #include<stdio.h> int main() { int n,i,sum,age; double num; scanf("%d",&n); for(i=0,sum=0;i<n;i++) { scanf("%d",&age); sum+=age; } num=(double)sum/n; printf("%.2f",num); return 0; }
#include<stdio.h> #include<stdlib.h> #define N 500 int main() { int a[N],n,i,m,p,r,s,t; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } p=m=a[0]; for(i=1;i<n;i++) { if(m>a[i]) m=a[i];
答案有错
int a,b,n; while(scanf("%d%d%d\n",&a,&b,&n)!=EOF) { printf("%d\n",(int)(pow(a,b))%n); } return 0;
}
计算绩点
1.题目描述 学校对本科生的成绩施行平均学分绩点制(GPA)。将学生的实际考分根据不同的学科的不同学分按一定的公式进 行计算。 曾经使用的规定如下: 实际成绩 绩点 90-100 4.0 85-89 3.7 82-84 3.3 78-81 3.0 75-77 2.7 72-74 2.3 68-71 2.0 64-67 1.5 60-63 1.0 60以下 0 1.一门课程的学分绩点=该课绩点*该课学分 2.总评绩点=所有学科绩点之和/所有课程学分之和 现要求你编写程序求出某人A的总评绩点(GPA)。 2.输入 第一行 总的课程数n(n<10); 第二行 相应课程的学分(两个学分间用空格隔开); 第三行 对应课程的实际得分; 此处输入的所有数字均为整数。 3.输出 输出有一行,总评绩点,精确到小数点后2位小数。(printf("%.2f",GPA);) 5.样例输入 5 43423 91 88 72 69 56 6.样例输出 2.52
二项式系数
1.题目描述 二项式系数C(n, k)因它在组合数学中的重要 性而被广泛地研究。二项式系数可以如下递 归的定义: C(1, 0) = C(1, 1) = 1; C(n, 0) = 1对于所有n > 0; C(n, k) = C(n ? 1, k ? 1) + C(n ? 1, k)对于所 有0 < k ≤ n。 给出n和k,你要确定C(n, k)的奇偶性。
登山
1.题目描述 五一到了,NUIST-ACM队组织大家去登 山观光,队员们发现山上一个有N个景点, 并且决定按照顺序来浏览这些景点,即 每次所浏览景点的编号都要大于前一个 浏览景点的编号。同时队员们还有另一 个登山习惯,就是不连续浏览海拔相同 的两个景点,并且一旦开始下山,就不 再向上走了。队员们希望在满足上面条 件的同时,尽可能多的浏览景点,你能 帮他们找出最多可能浏览的景点数么? 2.输入 Line 1: N (2 <= N <= 1000) 景点数 Line 2: N个整数,每个景点的海拔 3.输出 最多能浏览的景点数 4.样例输入 8 186 186 150 200 160 130 197 220 5.样例输出 4
构造新的模运算
1.题目描述 给定整数a,b,n,要求计算(a^b)mod n 2.输入 多组数据,每组数据一行,为三个用空格隔开的整数a,b,n 1<=a<=40,0<=b<=3,1<=n<=500 3.输出 每组数据输出一行,为所求值 4.样例输入 #include<stdio.h> 235 224 #include<math.h> 5.样例输出 int main() 3 { 0
4.样例输入 helloworld123Ha
5.样例输出 HELLOWORLD123HA
}
日历问题
1.题目描述 在我们现在使用的日历中, 闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年 是例外,它们不是闰年。例如:1700, 1800, 1900 和 2100 不是闰年,而 1600, 2000 和 2400是闰年。 给定从公元2000年1月1日开始逝去的天数,你的任务是给出这一天是哪年哪月哪日星期几。 2.输入 输入包含若干行,每行包含一个正整数,表示从2000年1月1日开始逝去的天数。输入最后一行是?1, 不必处理。可以假设结果的年份不会超过9999。 3.输出 对每个测试样例,输出一行,该行包含对应的日期和星期几。格式为“YYYY-MM-DD DayOfWeek”, 其中 “DayOfWeek” 必须是下面中的一个: "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" 或 "Saturday“。 4.样例输入 1730 1740 1750 1751 -1 5.样例输出 2004-09-26 Sunday 2004-10-06 Wednesday 2004-10-16 Saturday 2004-10-17 Sunday 6.提示 2000.1.1. 是星期六
#include<stdio.h> int type(int); char week[7][10]={"saturday","sunday","monday","tuesday","wednesday","thursday","friday"}; int year[2]={365,366}; int month[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}; int main(void) { int days,dayofweek; int i=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]); } return 0; } int type(int m) { if(m%4!=0||(m%100==0&&m%400!=0)) return 0; else return 1; }
#include<stdio.h> #include<math.h> int main() { int n,i; float a[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; else if(b[i]>=85) c[i]=3.7; else if(b[i]>=82) c[i]=3.3; else if(b[i]>=78) c[i]=3.0; else if(b[i]>=72) c[i]=2.3; else if(b[i]>=68) c[i]=2.0; else if(b[i]>=64) c[i]=1.5; else if(b[i]>=60) c[i]=1.0; else b[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); return 0; }
2.输入 输入包含多组测试数据。每组测试数据一对 整数n和k(0 ≤ k ≤ n < 231),占据独立一行。 文件结束符(EOF)表示输入结束。 3.输出 对每组测试数据,输出一行,包含一个“0” 或一个“1”,即C(n, k)除以2的余数。
4.样例输入 11 10 21
5.样例输出 1 1 0
#include<stdio.h> int fib(int n,int k) { if(n==1&&(k<2)) return 1; else if (k==0) return 1; else return fib(n-1,k-1)+fib(n1,k); } int main() { int n,k; while(scanf("%d %d",&n,&k)!=EOF) { printf("%d\n",fib(n,k)%2); } return 0; }
int f(int a[1000],int n) #include<stdio.h> { int f(int a[1000],int n); int i,j=1,s,m,b[1000]; int main() for(m=n;m>0;m--) { { int n,a[1000],i,m; for(i=1;i<m;i++) scanf("%d",&n); { if(a[i]>a[i-1]) for(i=0;i<n;i++) { { j++; scanf("%d",&a[i]); } } for(i=m-1;i<n-1;i++) m=f(a,n); { printf("%d",m); { return 0; } } } } b[n-m]=j; j=1; } s=b[0]; for(i=1;i<n;i++) { if(s<b[i]) { s=b[i]; } } return s;