南洋理工acm题目与答案_第1页
南洋理工acm题目与答案_第2页
南洋理工acm题目与答案_第3页
南洋理工acm题目与答案_第4页
南洋理工acm题目与答案_第5页
已阅读5页,还剩244页未读, 继续免费阅读

下载本文档

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

文档简介

1、4、ASCII码排序时间限制:3000 ms | 内存限制:65535 KB难度:2描述输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。输入第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之间无空格。输出对于每组输入数据,输出一行,字符中间用一个空格分开。样例输入3qweasdzxc样例输出e q wa d sc x z#include stdio.hmain()char a,b,c,d;int i;scanf(%d,&i);getchar();while(i-)scanf(%c%c%c,&a,&b,&c)

2、;getchar();if (ab) d=a;a=b;b=d;if (ac) d=a;a=c;c=d;if (bc) d=b;b=c;c=d;printf(%c %c %cn,a,b,c);-6、喷水装置(一)时间限制:3000 ms | 内存限制:65535 KB难度:3描述现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0Ri15)的圆被湿润,这有充足的喷水装置i(1i600)个,并且一定能把草坪全部湿润,你要做的是:选择尽量少的喷水装置,把整个草坪的全部湿润。输入第一行m表示有m组测试数据每一组测试数据的第一

3、行有一个整数数n,n表示共有n个喷水装置,随后的一行,有n个实数ri,ri表示该喷水装置能覆盖的圆的半径。输出输出所用装置的个数样例输入252 3.2 4 4.5 6 101 2 3 1 2 1.2 3 1.1 1 2样例输出25#include#include#includeusing namespace std;int main() int n,m; float a600; cin n; while(n-) double s = 0,k = 0; cin m; for(int i = 0;i ai; sort(a,a + m); for(int j = m - 1;j = 0;j-) s

4、+= (sqrt(aj * aj - 1) * 2; k+; if(s 20) cout k endl; break; 11、奇偶数分离时间限制:3000 ms | 内存限制:65535 KB难度:1描述有一个整型偶数n(2= n =10000),你要做的是:先把1到n中的所有奇数从小到大输出,再把所有的偶数从小到大输出。输入第一行有一个整数i(2=i30)表示有 i 组测试数据;每组有一个整型偶数n。输出第一行输出所有的奇数第二行输出所有的偶数样例输入21014样例输出1 3 5 7 9 2 4 6 8 10 1 3 5 7 9 11 13 2 4 6 8 10 12 14 #include

5、int main()int n;scanf(%d,&n);int a;while(n-)scanf(%d,&a);for(int i=1;i=a;i+=2)printf(%d ,i);puts();for(int i=2;i2)现要你来求第n个斐波纳奇数。(第1个、第二个都为1)输入第一行是一个整数m(m5)表示共有m组测试数据每次测试数据只有一行,且只有一个整形数n(n20)输出对每组输入n,输出第n个Fibonacci数样例输入3135样例输出125#includeusing namespace std;int main()int i,a20,n,t;a1=1;a2=1;for(i=3;i

6、n;while(n-)cint;coutatendl;/while(1);return 0;22、素数求和问题时间限制:3000 ms | 内存限制:65535 KB难度:2描述现在给你N个数(0N1000),现在要求你写出一个程序,找出这N个数中的所有素数,并求和。输入第一行给出整数M(0M10)代表多少组测试数据每组测试数据第一行给你N,代表该组测试数据的数量。接下来的N个数为要测试的数据,每个数小于1000输出每组测试数据结果占一行,输出给出的测试数据的所有素数和样例输入351 2 3 4 5811 12 13 14 15 16 17 181021 22 23 24 25 26 27 2

7、8 29 30样例输出104152#include#include using namespace std;bool isprime(int n) if(n=1) return false; float k=sqrt(float(n); for(int i=2; im; while(m-) int s = 0; cin n; for(int i=1; i a; if(isprime(a) s += a; cout s endl; return 0; 23、取石子(一)时间限制:3000 ms | 内存限制:65535 KB难度:2描述一天,TT在寝室闲着无聊,和同寝的人玩起了取石子游戏,而由于

8、条件有限,他/她们是用旺仔小馒头当作石子。游戏的规则是这样的。设有一堆石子,数量为N(1=N=1000000),两个人轮番取出其中的若干个,每次最多取M个(1=M=1000000),最先把石子取完者胜利。我们知道,TT和他/她的室友都十分的聪明,那么如果是TT先取,他/她会取得游戏的胜利么?输入第一行是一个正整数n表示有n组测试数据输入有不到1000组数据,每组数据一行,有两个数N和M,之间用空格分隔。输出对于每组数据,输出一行。如果先取的TT可以赢得游戏,则输出“Win”,否则输出“Lose”(引号不用输出)样例输入21000 11 100样例输出LoseWin#includeusing n

9、amespace std;int main()int t,m,n;cin t;while(t-) cin n m; if(n % (m + 1) = 0)cout Lose endl; else cout Win endl; 24、素数距离问题时间限制:3000 ms | 内存限制:65535 KB难度:2描述现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。如果输入的整数本身就是素数,则输出该素数本身,距离输出0输入第一行给出测试数据组数N(0N=10000)接下来的N行每行有一个整数M(0M1000000

10、),输出每行输出两个整数 A B.其中A表示离相应测试数据最近的素数,B表示其间的距离。样例输入36810样例输出5 17 111 1 #include#includeusing namespace std;bool isprime(int n) if(n=1) return false; float k=sqrt(float(n); for(int i=2; in; while(n-) int m; cinm;if(isprime(m) cout m 0 endl; else int l=m-1, r=m+1, d=1; while(1) if(isprime(l) cout l d end

11、l; break; else if(isprime(r) cout r d endl; break; else l-; r+; d+; return 0; 25、A Famous Music Composer时间限制:1000 ms | 内存限制:65535 KB难度:1描述Mr. B is a famous music composer. One of his most famous work was his set of preludes. These 24 pieces span the 24 musical keys (there are musically distinct 12 s

12、cale notes, and each may use major or minor tonality). The 12 distinct scale notes are: A A#=Bb B C C#=DbD D#=Eb E F F#=Gb G G#=AbFive of the notes have two alternate names, as is indicated above with equals sign. Thus, there are 17 possible names of scale notes, but only 12 musically distinct notes

13、. When using one of these as the keynote for a musical key, we can further distinguish between major and minor tonalities. This gives 34 possible keys, of which 24 are musically distinct. In naming his preludes, Mr. B used all the keys except the following 10, which were named instead by their alter

14、nate names: Ab minor A# majorA# minor C# major Db minor D# major D# minorGb major Gb minor G# major Write a program that, given the name of a key, give an alternate name if it has one, or report the key name is unique. 输入Each test case is described by one line having the format note tonality, where

15、note is one of the 17 names for the scale notes given above, and tonality is either major or minor (quotes for clarify).输出For each case output the required answer, following the format of the sample.样例输入Ab minorD# majorG minor样例输出Case 1: G# minorCase 2: Eb majorCase 3: UNIQUE #include#includeusing n

16、amespace std;string trans(string a)string b=;if(a1=#)b+=char(a0-A+1)%7+A);b+=b;elseb+=char(a0-A+6)%7+A);b+=#;return b;int main()string a,b;for(int t=1; cinab; t+)coutCase t: ;if(a.length()=1)coutUNIQUEendl;elsecouttrans(a) bendl;return 0;zhanghai28、大数阶乘时间限制:3000 ms | 内存限制:65535 KB难度:3描述我们都知道如何计算一个数的

17、阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?输入输入一个整数m(0m=5000)输出输出m的阶乘,并在输出结束之后输入一个换行符样例输入50样例输出30414093201713378043612608166064768844377641568960512000000000000 #includeusing namespace std;int main() int a17500 = 0,1; int m,i,j,t,n,k = 1; cin m; for(i = 2;i = m;i +) n = 0; for(j = 1;j = 1;i -) cout ai; cout endl;

18、 29、求转置矩阵问题时间限制:3000 ms | 内存限制:65535 KB难度:2描述求一个三行三列的转置矩阵。输入第一行一个整数n20,表示有n组测试数据,下面是n组数据;每组测试数据是九个整型数(每个数都不大于10000),分别为矩阵的的每项;输出每组测试数据的转置矩阵;请在每组输出之后加一个换行样例输入21 2 3 4 5 6 7 8 92 3 4 5 6 7 8 9 1样例输出1 4 72 5 83 6 92 5 83 6 94 7 1 #includeusing namespace std;int main()int num,a,b,c,d,e,f,g,h,i;cinnum;wh

19、ile(num-)cinabcdefghi;couta d gendlb e hendlc f iendlendl; 31、5个数求最值时间限制:1000 ms | 内存限制:65535 KB难度:1描述设计一个从5个整数中取最小数和最大数的程序输入输入只有一组测试数据,为五个不大于1万的正整数输出输出两个数,第一个为这五个数中的最小值,第二个为这五个数中的最大值,两个数字以空格格开。样例输入1 2 3 4 5样例输出1 5 #includeusing namespace std;int main() int n, max = 0, min = 10000; for(int i=1; i n;

20、 if(n max) max = n; else if(n min) min = n; cout min max endl; return 0; 32、组合数时间限制:3000 ms | 内存限制:65535 KB难度:3描述找出从自然数1、2、. 、n(0n10)中任取r(0r=n)个数的所有组合。输入输入n、r。输出按特定顺序输出所有组合。特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。样例输入5 3样例输出543542541532531521432431421321 #includeusing namespace std;int a100;int zuhe(int m,i

21、nt k)int i,j;for(i = m;i = k;i-) ak = i; if(k 1) zuhe(i - 1,k - 1);else for(j = a0;j 0;j-)cout aj;cout n r;a0 = r;zuhe(n,r); 33、蛇形填数时间限制:3000 ms | 内存限制:65535 KB难度:3描述在n*n方陈里填入1,2,.,n*n,要求填成蛇形。例如n=4时方陈为:10 11 12 19 16 13 28 15 14 37 6 5 4输入直接输入方陈的维数,即n的值。(n=100)输出输出结果是蛇形方陈。样例输入3样例输出7 8 16 9 25 4 3 #i

22、ncludeint main()int a,b,c,d,n,sum=1;int yi101101;scanf(%d,&n);for(a=0;a=(n-1)/2;a+)for(b=a;b=a;b-)yin-a-1b=sum+;for(b=n-a-2;b=a;b-)yiba=sum+;for(b=a+1;bn-a-1;b+)yiab=sum+;for(c=0;cn;c+)for(d=0;dn;d+)printf(%d ,yicd);printf(n); 34、韩信点兵时间限制:3000 ms | 内存限制:65535 KB难度:1描述相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三

23、人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c ,表示每种队形排尾的人数(a3,b5,c7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100 。输入输入3个非负整数a,b,c ,表示每种队形排尾的人数(a3,b5,c7)。例如,输入:2 4 5输出输出总人数的最小值(或报告无解,即输出No answer)。实例,输出:89样例输入2 1 6样例输出41 #includeusing namespace std;int main() int a,b,c,i; cinabc; bool flag = false; fo

24、r(i=11;i100;i+) if(i-a)%3=0&(i-b)%5=0&(i-c)%7=0) couti; flag =true; if(!flag) coutNo answer; 39、水仙花数时间限制:1000 ms | 内存限制:65535 KB难度:0描述请判断一个数是不是水仙花数。其中水仙花数定义各个位数立方和等于它本身的三位数。输入有多组测试数据,每组测试数据以包含一个整数n(100=n1000)输入0表示程序输入结束。输出如果n是水仙花数就输出Yes否则输出No样例输入1531540样例输出YesNo #includeusing namespace std;int main(

25、)int a;while(1)cina;if(a=0) break;cout(a=153|a=370|a=371|a=407)?Yes:No)endl; 40、公约数和公倍数时间限制:1000 ms | 内存限制:65535 KB难度:1描述小明被一个问题给难住了,现在需要你帮帮忙。问题是:给出两个正整数,求出它们的最大公约数和最小公倍数。输入第一行输入一个整数n(0n=10000),表示有n组测试数据;随后的n行输入两个整数i,j(0i,j=32767)。输出输出每组测试数据的最大公约数和最小公倍数样例输入36 612 1133 22样例输出6 61 13211 66 #includeint

26、 main()int a,p,r,m,n,temp;scanf(%d,&a);while(a-)scanf(%d%d,&n,&m);if(nm)temp=n;n=m;m=temp;p=n*m;while(m!=0)r=n%m;n=m;m=r;printf(%d %dn,n,p/n);return 0; 41、三个数从小到大排序时间限制:3000 ms | 内存限制:65535 KB难度:0描述现在要写一个程序,实现给三个数排序的功能输入输入三个正整数输出给输入的三个正整数排序样例输入20 7 33样例输出7 20 33 #include int main()int a,b,c,an3,i,t,

27、j,max,flag;scanf (%d %d %d,&an0,&an1,&an2);for (i=0;i3;i+)t=max=ani;flag=i;for (j=i;jt) max=anj;flag=j;t=ani;ani=max;anflag=t;for (i=2;i=0;i-)printf (%d ,ani);return 0;44、 子串和时间限制:5000 ms | 内存限制:65535 KB难度:3描述给定一整型数列a1,a2.,an,找出连续非空子串ax,ax+1,.,ay,使得该子序列的和最大,其中,1=x=y=n。输入第一行是一个整数N(N=10)表示测试数据的组数)每组测试

28、数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个整数I(-100=I=100),表示数列中的所有元素。(0n=1000000)输出对于每组测试数据输出和最大的连续子串的和。样例输入151 2 -1 3 -2样例输出5#includeusing namespace std;int main() int t;cin t;while (t-) int n, a, s, b; cin n;cin a;s = a;for (int i = 0; i b;if (a s) s = a; cout s endl; 46、 最少乘法次数时间限制:1000 ms | 内存限制:65535 KB

29、难度:3描述给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘。如24:2*2=22(第一次乘),22*22=24(第二次乘),所以最少共2次; 输入第一行m表示有m(1=m=100)组测试数据;每一组测试数据有一整数n(0n=10000);输出输出每组测试数据所需次数s;样例输入3234样例输出122 #include using namespace std;int main() int N; cinN; while(N-) int n; cinn; int k=0; while(n1) if(n&1) k+; k+; n/=2; coutkendl;

30、48、小明的调查作业时间限制:1000 ms | 内存限制:65535 KB难度:1描述小明的老师布置了一份调查作业,小明想在学校中请一些同学一起做一项问卷调查,聪明的小明为了实验的客观性,想利用自己的计算机知识帮助自己。他先用计算机生成了N个1到1000之间的随机整数(0N1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。输入输入有2行,第1行为1个正整数,表示所生成的随机数的个数:N第2行有N个用空格隔开的正整数,为所产生的随机数。输出输出也是2

31、行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。样例输入1020 40 32 67 40 20 89 300 400 15样例输出815 20 32 40 67 89 300 400 #includeusing namespace std;bool a1002;int main()/freopen(1.txt,r,stdin);/freopen(2.txt,w,stdout);int n;cinn;int x;for (int i=1;ix;ax=1;for (int i=1;i=1000;i+)if(ai) couti ;

32、return 0; 50、爱摘苹果的小明时间限制:1000 ms | 内存限制:65535 KB难度:1描述小明家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,小明就会跑去摘苹果。小明有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及小明把手伸直的时候能够达到的最大高度,请帮小明算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。输入第一行输入N(0N100)表示测试数据组数,接下来每组测试输入包括两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个

33、苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示小明把手伸直的时候能够达到的最大高度。输出输出包括一行,这一行只包含一个整数,表示小明能够摘到的苹果的数目。样例输入1100 200 150 140 129 134 167 198 200 111110样例输出5 #includeusing namespace std;int main() int a10,b,c=0,d; cind; while(d-) for(int i=0;iai; cinb; for(int i=0;i=ai) c+; coutcend

34、l; c=0; 51、管闲事的小明时间限制:4000 ms | 内存限制:65535 KB难度:2描述某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,L,都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。聪明的小明干了一件又一件事,他觉得这个很有意思,就想用计算机来帮助建筑工人统计这些树,现在任务来了,计

35、算将这些树都移走后,马路上还有多少棵树。输入第一行是一个整数N表示有N组测试数据(1=N=100)每组测试数据的第一行有两个整数:L(1 = L = 10000)和 M(1 = M = 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。 输出输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。样例输入1500 3150 300100 200470 471样例输出298 #include#define N 10005int main()int nCases;scanf(%d,&

36、nCases);while( nCases- )int L,M;scanf(%d%d,&L,&M);int listN=0;while( M- )int b,e;scanf(%d%d,&b,&e);for(int i=b;i=e;i+)listi=1;int counter=0;for(int i=0;i=L;i+)if( !listi )counter+;printf(%dn,counter);return 0; 53、不高兴的小明时间限制:3000 ms | 内存限制:65535 KB难度:1描述 小明又出问题了。妈妈认为聪明的小明应该更加用功学习而变的更加厉害,所以小明除了上学之外,还要

37、参加妈妈为他报名的各科复习班。另外每周妈妈还会送他去学习朗诵、舞蹈和钢琴。但是小明如果一天上课超过八个小时就会不高兴,而且,上得越久就会越不高兴。假设小明不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下小明下周的日程安排,看看下周他会不会不高兴;如果会的话,哪天最不高兴。输入第一行输入N(0N100)表示测试数据组数,接下来每组测试数据输入包括七行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。 输出每组测试数据输出包括一行,这一行只包含一个数字。如果不会不高兴则输出0,如果会则输出最不高

38、兴的是周几(用1,2,3,4,5,6,7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的天。样例输入15 36 27 25 35 40 40 6样例输出3 #include using namespace std;int main()int n;cinn;while(n-)int a,b,max=8,d=0;for (int i=0;iab;if(a+bmax)d=i;max=a+b;if(max8) coutd+1endl;else cout0endl;return 0; zhanghai54、 小明的存钱计划时间限制:3000 m

39、s | 内存限制:65535 KB难度:2描述小明的零花钱一直都是自己管理。每个月的月初妈妈给小明300元钱,小明会预算这个月的花销,并且总能做到实际花销和预算的相同。 为了让小明学习如何储蓄,妈妈提出,小明可以随时把整百的钱存在她那里,到了年末她会加上20还给小明。因此小明制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果他预计到这个月的月末手中还会有多于100元或恰好100元,他就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。 例如11月初小明手中还有83元,妈妈给了小明300元。小明预计11月的花销是180元,那么他就会在妈妈那里存200元,自己留下183元。到了11月月末

40、,小明手中会剩下3元钱。 小明发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,小明手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,小明将不得不在这个月省吃俭用,压缩预算。 现在请你根据2010年1月到12月每个月小明的预算,判断会不会出现这种情况。如果不会,计算到2010年年末,妈妈将小明平常存的钱加上20还给小明之后,小明手中会有多少钱。输入第一行输入一个整数N,表示测试数据的组数(N=10)每组测试数据输入12行数据,每行包含一个小于350的非负整数,分别表示1月到12月小明的预算。输出每组输出包括一行,这一行只包含一个整数。如

41、果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第一个月;否则输出到2010年年末小明手中会有多少钱(如果是小数,请四舍五入到整数位)。样例输入129023028020030017034050 90 80 20060样例输出-7#includeint main() int n, i; scanf(%d, &n);while(n-) int a12 = 0 ,save2 = 0 ,surplus = 0;float save1 = 0;for(i = 0; i 12; i+) scanf(%d, &ai); for(i = 0; i 12; i+) surplus =

42、 300 - ai; if(surplus = 100 ) save1 += 100;surplus -= 100; if (surplus = 0 ) save1 = save1 * 1.2 + surplus;save2 = (int)(save1 + 0.5); printf(%dn, save2); 56、阶乘因式分解(一)时间限制:3000 ms | 内存限制:65535 KB难度:2描述给定两个数m,n,其中m是一个素数。将n(0=n=10000)的阶乘分解质因数,求其中有多少个m。输入第一行是一个整数s(0s=100),表示测试数据的组数随后的s行, 每行有两个整数n,m。输出输

43、出m的个数。样例输入2100 516 2样例输出2415 #includeusing namespace std;int get(int n,int num)if(n=0) return 0;else return get(n/num,num)+n/num;int main()int n;cinn;while(n-)int a,b;cinab;coutget(a,b)3087-8352-6174-6174,输出是4输入第一行输入n,代表有n组测试数据。接下来n行每行都写一个各位数字互不相同的四位数输出经过多少次上面描述的操作才能出现循环样例输入11234样例输出4 #include#inclu

44、de#includeusing namespace std;int main()/freopen(1.txt,r,stdin);int k;cink;while(k-)int n,a4,n1,n2;scanf(%d,&n);int s=1;while(n!=6174)a0=n%10;a3=n/1000;a1=n/10%10;a2=n/100%10;sort(a,a+4);n1=1000*a3+100*a2+10*a1+a0;n2=1000*a0+100*a1+10*a2+a3;n=n1-n2;s+;printf(%dn,s); 60、谁获得了最高奖学金时间限制:1000 ms | 内存限制:6

45、5535 KB难度:2描述 某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:1) 院士奖学金,每人8000元,期末平均成绩高于80分(80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;2) 五四奖学金,每人4000元,期末平均成绩高于85分(85),并且班级评议成绩高于80分(80)的学生均可获得;3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(90)的学生均可获得;4) 西部奖学金,每人1000元,期末平均成绩高于85分(85)的西部省份学生均可获得;5) 班级贡献奖,每人850元,班级评议成绩高于80分(80)的学生干部均可获得;

46、只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。输入第一行输入数据N,表示测试数据组数(0N100),每组测试数据输入的第一行是一个整数X(1 = X = 100),表示学生的总数。接下来的X行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。姓

47、名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。每两个相邻数据项之间用一个空格分隔。输出 每组测试数据输出包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。第三行是这X个学生获得的奖学金的总数。样例输入14YaoLin 87 82 Y N 0ChenRuiyi 88 78 N Y

48、 1LiXin 92 88 N N 0ZhangQin 83 87 Y N 1样例输出ChenRuiyi900028700 #include#include#include#includeusing namespace std;int calc(int qm,int py,bool gb,bool xb,bool lw)int all=0;if(qm80 & lw) all+=8000;if(qm85& py80) all+=4000;if(qm90) all+=2000;if(xb&qm85) all+=1000;if(gb&py80) all+=850;return all;int mai

49、n()int n;cinn;while(n-)int m;cinm;int max_num=0,all=0;string max_stu;while(m-)int qm,py,lw;string xm,gbs,xbs;cinxmqmpygbsxbslw;bool gb=gbs=Y,xb=xbs=Y;int num=calc(qm,py,gb,xb,lw0);all+=num;if(nummax_num) max_num=num;max_stu=xm;coutmax_stuendlmax_numendlallendl; 62、笨小熊时间限制:2000 ms | 内存限制:65535 KB难度:2

50、描述笨小熊的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小熊就认为这是个Lucky Word,这样的单词很可能就是正确的答案。输入第一行数据N(0N100)表示测试数据组数。每组测试数据输入只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。输出每组测试数据输出共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“L

51、ucky Word”,否则输出“No Answer”; 第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0样例输入2errorolympic样例输出Lucky Word2No Answer0 #include#include#include#includeusing namespace std;int f(int n) for (int i = 2; i n;while (n-) int a = 1, b = 1, min = 100, max = 0, c;cin s;c = strlen(s);sort (s, s + c);for (int i

52、= 0; i max) max = a; if (a max) max = a;if (a min) min = a;if (max - min = 0 | max - min = 1) cout No Answer endl; cout 0 endl; if (max - min != 0 & max - min != 1) if (f(max - min) cout Lucky Word endl; cout max - min endl; else cout No Answer endl;cout 0 endl; 64、鸡兔同笼时间限制:3000 ms | 内存限制:65535 KB难度

53、:1描述已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡和兔的数目,如果无解,则输出“No answer”(不要引号)。输入第一行输入一个数据a,代表接下来共有几组数据,在接下来的(a10)a行里,每行都有一个n和m.(0m,n100)输出输出鸡兔的个数,或者No answer样例输入214 3210 16样例输出12 2No answer #includeusing namespace std;int main() int N; cin N; while(N-) int n, m, x, y; cin n m; y = (m - 2 * n) / 2; x = n - y; if(

54、m % 2 = 0 & x = 0 & y = 0) cout x y endl; else cout No answer endl; 65、另一种阶乘问题时间限制:3000 ms | 内存限制:65535 KB难度:1描述大家都知道阶乘这个概念,举个简单的例子:5!=1*2*3*4*5.现在我们引入一种新的阶乘概念,将原来的每个数相乘变为i不大于n的所有奇数相乘例如:5!=1*3*5.现在明白现在这种阶乘的意思了吧!现在你的任务是求出1!+2!.+n!的正确值(n=20)输入第一行输入一个a(a=20),代表共有a组测试数据接下来a行各行输入一个n.输出各行输出结果一个整数R表示1!+2!.

55、+n!的正确值样例输入235样例输出523 #includeint main()int a,b,c,d,e;scanf(%d,&a);while(a-)int f=0;scanf(%d,&b);for(c=1;c=b;c+)for(d=1,e=1;d=y,使得1/k=1/x+1/y.输入第一行输入一个整数n,代表有n组测试数据。接下来n行每行输入一个正整数k输出按顺序输出对应每行的k找到所有满足条件1/k=1/x+1/y的组合样例输入22 12样例输出1/2=1/6+1/31/2=1/4+1/41/12=1/156+1/131/12=1/84+1/141/12=1/60+1/151/12=1/

56、48+1/161/12=1/36+1/181/12=1/30+1/201/12=1/28+1/211/12=1/24+1/24 #includeusing namespace std;int main () int n;cin n;while (n-) int t;cin t;for (int i = t * (t + 1); i = 2 * t; i-) for (int j = t + 1; j = 2 * t; j+) if (t * (i + j) = i * j) cout 1/ t = 1/ i + 1/ j endl;67、三角形面积时间限制:3000 ms | 内存限制:655

57、35 KB难度:2描述给你三个点,表示一个三角形的三个顶点,现你的任务是求出该三角形的面积输入每行是一组测试数据,有6个整数x1,y1,x2,y2,x3,y3分别表示三个点的横纵坐标。(坐标值都在0到10000之间)输入0 0 0 0 0 0表示输入结束测试数据不超过10000组输出输出这三个点所代表的三角形的面积,结果精确到小数点后1位(即使是整数也要输出一位小数位)样例输入0 0 1 1 1 30 1 1 0 0 00 0 0 0 0 0样例输出1.00.5 #include#includeint main()int x1,x2,x3,y1,y2,y3;while(scanf(%d%d%d

58、%d%d%d,&x1,&y1,&x2,&y2,&x3,&y3)if(x1=0&x2=0&x3=0&y1=0&y2=0&y3=0)break;double a,b,c,p,s;a=sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);b=sqrt(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3);c=sqrt(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3);p=(a+b+c)/2;printf(%.1fn,sqrt(p*(p-a)*(p-b)*(p-c);return 0; 68、三点顺序时间限制:1000 ms | 内存限制:65535 KB难度:3

59、描述现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断A,B,C是顺时针给出的还是逆时针给出的?如:图1:顺时针给出图2:逆时针给出 输入每行是一组测试数据,有6个整数x1,y1,x2,y2,x3,y3分别表示A,B,C三个点的横纵坐标。(坐标值都在0到10000之间)输入0 0 0 0 0 0表示输入结束测试数据不超过10000组输出如果这三个点是顺时针给出的,请输出1,逆时针给出则输出0样例输入0 0 1 1 1 30 1 1 0 0 00 0 0 0 0 0样例输出01 #includeusing namespace std;int main()while(1

60、)int x1,y1,x2,y2,x3,y3;cinx1y1x2y2x3y3;if(x1=0&y1=0&x2=0&y2=0&x3=0&y3=0)break;int ax=x2-x1,ay=y2-y1,bx=x2-x3,by=y2-y3;if(ax*by-ay*bx0)cout0endl;elsecout1endl; 69、数的长度时间限制:3000 ms | 内存限制:65535 KB难度:1描述 N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)*2*1.现在你的任务是计算出N!的位数有多少(十进制)?输入首行输入n,表示有多少组测试数据(n10)随后n行每行输入一组测试数据

温馨提示

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

评论

0/150

提交评论