算法标准答案.docx

上传人:sk****8 文档编号:4350713 上传时间:2019-10-25 格式:DOCX 页数:151 大小:127.79KB
下载 相关 举报
算法标准答案.docx_第1页
第1页 / 共151页
算法标准答案.docx_第2页
第2页 / 共151页
算法标准答案.docx_第3页
第3页 / 共151页
算法标准答案.docx_第4页
第4页 / 共151页
算法标准答案.docx_第5页
第5页 / 共151页
点击查看更多>>
资源描述

1、Problem H: 乘法口诀Time Limit: 1 SecMemory Limit: 64 MBSubmit: 11234Solved: 3034Description还记得以前小学时的九九乘法口诀吧。现在要求你编写程序打印出乘法口诀。 不过现在的乘法口诀表跟以前稍微有点区别,我告诉你一个数字n( 1 = n = 9),你要给我打出相应的nn乘法口诀表。Input多个测试数据。每个测试数据一行,输入整数n.Output输出nn乘法口诀表。 每个乘法口诀表中的任何一个乘式占6列,不足6列的在后面补空格。同一行2个乘式之间有一个空格。 两个乘法口诀表之间有一个空行。注意乘法口诀中每一行最后没

2、有空格,如4*4=16和5*5=25后面都没有空格的。Sample Input126Sample Output1*1=11*1=11*2=2 2*2=41*1=1 1*2=2 2*2=41*3=3 2*3=6 3*3=91*4=4 2*4=8 3*4=12 4*4=161*5=5 2*5=10 3*5=15 4*5=20 5*5=251*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36HINT%-2d表示对齐方式为左对齐例如,printf(%-6d,100);将输出: 100#include#includeint main()int n,i,j;char a1010

3、;while(scanf(%d,&n)!=EOF)for(i=1;i=n;i+)for(j=1;j=i-1;j+)aij=j*i;printf(%d*%d=%-2d ,j,i,aij);printf(%d*%d=%-2d,i,i,i*i);printf(n);printf(n);return 0;Problem G: 打印金字塔Time Limit: 1 SecMemory Limit: 64 MBSubmit: 6241Solved: 3777Description请编写程序输出金字塔图形。Input多个测试数据。每个测试数据输入一个整数n(1 = n = 9)Output输出n层金字塔。S

4、ample Input13Sample Output* * *HINT用双重循环做,外循环代表行数,第一个内循环输出空格,第二个内循环输出*for(;)for(;)/输出空格for(;)/输出*/外循环#includeint main() int n,i,j,k;while(scanf(%d,&n)!=EOF)for(i=1;i=n;i+)for(j=1;j=n-i;j+) printf( );for(k=1;k2*i;k+) printf(*); printf(n) ; return 0;3920: 老外买瓷砖Time Limit: 1 SecMemory Limit: 64 MBSubmi

5、t: 1344Solved: 656Description大酬宾活动的第三天,店里突然来了一个老外。还是高中生的小娥在开店。可怜的小娥被老外流畅的外语给吓蒙了。老外没办法,只好一个字母一个字母地把订单念给小娥。吓蒙的小娥只记得有几个元音字母了(aeiou),不过很不幸的是她把H也当作了A,Y当作了I.Input第一行输入一个整数n,表示老外说了多少句话。然后是n行,每一行是老外说的外语。Output对于老外说的每句话,请统计出小娥记得的各元音字母的个数(包含记错的),每个元音1行,格式见例子Sample Input2Hello.How are you!Sample Outputa:1e:1i:

6、0o:1u:0a:2e:1i:1o:2u:1HINT一句话不超过50个字符#include void f(int* a,char* s) while(*s) switch(*s) case h: case H: case A: case a:a0+; break; case E: case e: a1+;break; case Y: case y: case I: case i: a2+; break; case O: case o: a3+; break; case U: case u: a4+;break; s+; int main() char s200; int a5; int n,i

7、,j; scanf(%d,&n); getchar(); for(i=0;in;i+) for(j=0;j5;j+) aj=0; gets(s); f(a,s); printf(a:%dne:%dni:%dno:%dnu:%dn,a0,a1,a2,a3,a4); return 0; Problem A: 双层金字塔Time Limit: 1 SecMemory Limit: 64 MBSubmit: 4962Solved: 3290Description输出双层金字塔。Input多个测试数据。每个测试数据输入一个整数n( 2 = n = 9) Output输出双层金字塔。Sample Inpu

8、t25Sample Output * * * * * * * * * *#include int main() int n,i,j,a,b; while(scanf(%d,&n)!=EOF) for(i=1;i=n;i+) for(j=1;j=n-i;j+) printf( ); for(j=1;j=2*i-1;j+) printf(*); printf(n); for(a=1;an;a+) for(b=1;b=a;b+) printf( ); for(b=1;b=2*(n-a)-1;b+) printf(*); printf(n); return 0; 3919: 堆瓷砖Time Limit

9、: 1 SecMemory Limit: 64 MBSubmit: 1819Solved: 750Description上次来定制的客户买走了不少瓷砖,确实给公司带来了不少利润,可是望着裁剪下来的瓷砖,陈盖历发愁了。这些尺寸不一的瓷砖堆的满地都是。哎,还是想个办法把他们堆成堆吧。当然堆的时候最大的要放在下面,绝对不允许大的瓷砖放在小的上面,否则变形了下次就不好卖了。你能帮忙把这些瓷砖堆起来吗?Input第一行输入一个整数n,表示共要堆成的堆数。然后是n行,每行先输入1个整数m,表示这一堆有m块瓷砖,然后紧跟着输入m个整数,表示瓷砖的尺寸Output对于每一堆输出一行,分别是该堆的瓷砖尺寸,按照

10、从大到小进行排列,2个数之间有一个空格Sample Input24 3 4 5 63 8 4 9Sample Output6 5 4 39 8 4HINTn m 不会超过5012345678910111213141516171819202122232425262728293031323334#include int main() int n,i,j,l,a50,index,t,k; scanf(%d,&n); for(k=0;kn;k+) scanf(%d,&l); for(j=0;jl;j+) scanf(%d,&aj); for(j=0;jl;j+) index=j; for(i=j+1;

11、il;i+) if(aindexai) index=i; t=aindex; aindex=aj; aj=t; for(j=0;jl-1;j+) printf(%d ,aj); printf(%dn,al-1); return 0; 3918: 定制瓷砖Time Limit: 1 SecMemory Limit: 64 MBSubmit: 1746Solved: 1092Description新年大酬宾活动一开展,吸引了好多客户。这天来了一个客户,他有一个特别的要求。他需要定制不同尺寸的瓷砖,用来装修在杭州、临安等地买的10几套房子。他的要求是这样的,他报出房间的长与宽(当然都是整数),然后你

12、按照他的要求给他一个瓷砖的尺寸(正方形的,也是整数),以该尺寸的瓷砖能正好铺满他要求的房间。当然他希望瓷砖的数量越少越好。ACM出身的陈盖历嘿嘿一笑,不就是求最大公约数吗?当然程序还是要你来写的。Input第一行输入一个整数n,表示客户的房间数。然后是n行,每行输入2个整数,分别表示房间的长与宽Output对于每组数据,输出一个整数,表示瓷砖的边长Sample Input26 126 8Sample Output62#include int main() int n,i,a,b,t,j,m; scanf(%d,&n); for(i=1;ib) t=a;a=b;b=t; for(j=a;j=2;

13、j-) if(a%j=0&b%j=0) break; m=j; printf(%dn,j); return 0; 4135: 新年挂灯笼Time Limit: 1 SecMemory Limit: 128 MBSubmit: 1025Solved: 525Description又是新的一年,家家户户挂灯笼。请你编写一个程序,能根据需要打印出灯笼的图案。Input多组测试数据,先输入一个整数t,表示组数,然后输入然后输入t行,每行输入1个整数n(n不会大于9),代表灯笼上半部分的层数Output对于每组测试数据输出对应的灯笼图案Sample Input3123Sample Output* * *

14、 * * * *#include int main() int n; scanf(%d,&n); for(int i=1;i=n;i+) int x; int j; scanf(%d,&x); for(j=1;j=x;j+) for(int k=1;k=x-j;k+) printf( ); for(int k=0;k1;j-) for(int k=1;kx-j+2;k+) printf( ); for(int k=0;k(x+2*(j-2);k+) printf(*); printf(n); return 0; 4137: 压岁钱Time Limit: 1 SecMemory Limit: 1

15、28 MBSubmit: 1186Solved: 721Description过年了,有些同学还能收到压岁钱。真羡慕。你能帮他算下,他收到了多少压岁钱吗?Input多组测试数据,先输入一个整数T,表示组数,然后输入然后输入t行,每行先输入1个整数n表示他收到压岁钱的次数,后面紧跟着n个整数,表示他每次收到的钱数Output对于每组测试数据,请输出他收到压岁钱总数Sample Input23 100 200 3004 100 400 50 600Sample Output6001150#include int main() int n,m,i,t,j,s; scanf(%d,&t); for(i

16、=1;i=t;i+) scanf(%d,&n); s=0; for(j=0;jn;j+) scanf(%d,&m); s=s+m; printf(%dn,s); return 0; 2413: 求三角形面积C语言初学者百题大战之十四Time Limit: 1 SecMemory Limit: 64 MBSubmit: 7507Solved: 4152Description输入三角形的三边长,求三角形面积。为简单起见,设输入的三边长a,b,c能构成三角形。Input输入为一行,输入三角形的三条边长。Output输出为一行,计算出该三角形的面积,精确到小数点后2位Sample Input3 4 5

17、Sample Output6.00HINT面积可以按下面的公式计算s=sqrt(p(p-a)(p-b)(p-c)其中p=(a+b+c)/2#include #include int main() float a,b,c,s,p; scanf(%f %f %f,&a,&b,&c); p=(a+b+c)*0.5; s=sqrt(p*(p-a)*(p-b)*(p-c); printf(%.2fn,s); return 0; 2412: 鹦鹉学舌3C语言初学者百题大战之十三Time Limit: 1 SecMemory Limit: 64 MBSubmit: 5169Solved: 2593Descr

18、iption鹦鹉越来越会说话了,你可以说一句话(最多不要超过80个字符哦),鹦鹉也能很快把你的话重复一遍。Input输入一行,中间可能有空格,回车表示说完了。Output输出也为一行,输出刚才输入的内容。Sample InputI am a student.Sample OutputI am a student.#include #include int main() char a81, * p=a; gets(a); puts(a); 2411: 鹦鹉学舌2C语言初学者百题大战之十二Time Limit: 1 SecMemory Limit: 64 MBSubmit: 4234Solved:

19、 3456Description还记得以前做过的那题鹦鹉学舌吗?恩,不错,那次要求输入一个整数,然后你要输出该整数。现在要求从终端(键盘)输入一个字符,以回车键确认,然后你的程序应该能输出该字符。Input输入一个字符,以回车确认Output输出你刚才输入的字符Sample InputeSample Outpute#include int main() char c; c = getchar(); putchar(c); printf(n); return 0; 3549: 更改大小写Time Limit: 1 SecMemory Limit: 64 MBSubmit: 4089Solved:

20、 2942Description将输入一行字符串(小于80个字符),将其中的所有小写字母改为大写,其他字符不变。Input输入一行字符串,以回车结束。Output将字符串中小写字母改大写后输出。Sample InputThere are 3 pens.Sample OutputTHERE ARE 3 PENS.HINT#include #include int main() char s80; int len,i; gets(s); /输入一段字符 len=strlen(s); /计算字符串长度 for(i=0;i=a&si=z) /将小写字母转换为大写 si=si-32; puts(s);

21、/输出修改后的字符串 return 0; 3545: 颠倒字符串Time Limit: 1 SecMemory Limit: 64 MBSubmit: 4532Solved: 2539Description输入一个以回车结束的字符串(少于80个字符),将字符串的内容颠倒过来再输出Input多组测试数据,每组输入一个以回车结束的字符串(少于80个字符)。Output将这个字符串颠倒过来输出Sample InputABC XYZMy godSample OutputZYX CBAdog yM#include int main() char c90; int n,i,a; while(c0=getc

22、har()!=EOF) i=1; while(ci=getchar()!=n) i+; for(n=i-1;n=0;n-) printf(%c,cn); putchar(n); return 0; Problem A: 零起点学算法87打印所有低于平均分的分数Time Limit: 1 SecMemory Limit: 64 MBSubmit: 4813Solved: 1344Description输入n个成绩,打印出所有低于平均分的分数(注意:ave = s/n中s 为float或ave = (float)s/n)。Input多个测试数据每个测试数据一行,在这行中先输入分数的个数n(1=n=

23、100),然后紧跟着输入n个整数(代表分数)Output对于每个测试数据,输出一行按照输入顺序输出所有低于()平均分的分数,中间用一个空格隔开,如果没有低于平均分的那么只输出一个空行Sample Input3 40 50 602 90 805 10 10 90 80Sample Output408010 10#include int main() int a,p100,flag=0; while(scanf(%d,&a)!=EOF) int i,sum; double ave; sum=0; for(i=0;ia;i+) scanf(%d,&pi); sum=sum+pi; ave=(floa

24、t)sum/a; for(i=0;ia;i+) if(piave) if(flag=0) printf(%d,pi); flag=1; else printf( %d,pi); printf(n); flag=0; 2445: 平方和与立方和Time Limit: 1 SecMemory Limit: 64 MBSubmit: 4252Solved: 2145Description给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和。Input输入数据包含多组测试实例,每组测试实例包含一行,由两个整数m和n组成。Output对于每组输入数据,输出一行,应包括两个整数x和y,分别表

25、示该段连续的整数中所有偶数的平方和以及所有奇数的立方和。你可以认为32位整数足以保存结果。Sample Input3 12 5Sample Output4 2820 152#include int main() int a,b,t,i,s,c; while(scanf(%d%d,&a,&b)!=EOF) s=0; c=0; if(ab) t=a; a=b; b=t; for(i=a;i=b;i+) if(i%2=0) s=s+i*i; if(i%2=1) c=c+i*i*i; printf(%d %dn,s,c); return 0; 2444: 求奇数的乘积Time Limit: 1 Sec

26、Memory Limit: 64 MBSubmit: 4692Solved: 3042Description给你n个整数,求他们中所有奇数的乘积。Input输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数,你可以假设每组数据必定至少存在一个奇数。Output输出每组数中的所有奇数的乘积,对于测试实例,输出一行。Sample Input3 1 2 34 2 3 4 5Sample Output315#include int main() int n,i,s,m; while(scanf(%d,&n)!=EOF) s=1; for(i=1;i

27、=n;i+) scanf(%d,&m); if(m%2=1) s=s*m; printf(%dn,s); return 0; Problem A: 偶数排序Time Limit: 1 SecMemory Limit: 64 MBSubmit: 1959Solved: 987Description输入一个正整数N和N个整数,将它们中的偶数按从大到小的顺序进行排序后输出。 Input多组测试数据,每组输入一个正整数N(1N100)和N个整数,用空格分隔。 Output将这N个数中的偶数按从大到小的顺序输出Sample Input10 8 4 14 2 11 30 40 500 17 1008 80

28、 200 99 -12 34 55 88 11Sample Output500 100 40 30 14 8 4 2200 88 80 34 -12#include int main() int i,j,t,n; int a101,b101; while(scanf(%d,&n)!=EOF) for(i=1;i=n;i+) scanf(%d,&ai); for(i=1;i=n;i+) for(j=i;j=n;j+) if(aiaj) t=ai; ai=aj; aj=t; elsecontinue; for(i=1;i=n;i+) if(ai%2=0) if(i!=n) printf(%d ,a

29、i); elseprintf(%dn,ai); Problem B: 零起点学算法92元素前移1位Time Limit: 1 SecMemory Limit: 64 MBSubmit: 1934Solved: 1231Description将数组所有元素前移一位(最前面的元素移到最后)然后输出移动后的数组Input多组测试数据,每组第一行输入一个整数n(不大于20)第二行输入n个整数Output输出前移一位后的数组Sample Input41 2 3 4Sample Output2 3 4 1#include int main() int n,m,i,j,k; int a20,b20; whi

30、le(scanf(%d,&n)!=EOF) for(i=0;in;i+) scanf(%d,&ai); for(i=0;in-1;i+) bi=ai+1; printf(%d ,bi); printf(%dn,a0); return 0; Problem C: 零起点学算法86FibonaccTime Limit: 1 SecMemory Limit: 64 MBSubmit: 1798Solved: 983DescriptionFibonacci数列定义为(1,1,2,3,5,8,.),即每个元素是前两个元素的和。如果一个Fibonacci数与所有小于它的Fibonacci数互质,那么称之为

31、Fibonacci质数。现在要求你输出前n个Fibonacci数 The Fibonacci Numbers 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 . are defined by the recurrence: F(0)=0 F(1)=1 F(i)=F(i-1)+F(i-2) Write a program to calculate the Fibonacci Numbers. InputThe first line of the input file contains a single integer T, the number of test cases

32、. The following T lines,each contains an integer n ( 0 = n = 45 ), and you are expected to calculate Fn.OutputOutput Fn on a separate line.Sample Input5035920Sample Output025346765#include int f(int n); main() int t,i; int n,c50; scanf(%d,&t); for(i=0;it;i+) scanf(%d,&ci); for(i=0;it;i+) n=ci; f(n);

33、 int f(int n) int i,f1=1,f2=1,f3; if(n=0) printf(0n); else if(n=1|n=2) printf(1n); else for(i=0;in-2;i+) f3=f1+f2; f2=f1; f1=f3; printf(%dn,f1); 3542: 插入一个数到数列中Time Limit: 1 SecMemory Limit: 64 MBSubmit: 3257Solved: 1671Description已有一个排序好的数列:0 10 20 30 40 50 60 70 80,输入一个任意整数m,按序插入到正确位置,输出插入m后的数列。In

34、put多组测试数据,每组输入一个整数mOutput输出插入m后的数列Sample Input35-590Sample Output0 10 20 30 35 40 50 60 70 80-5 0 10 20 30 40 50 60 70 800 10 20 30 40 50 60 70 80 90#include int main() int n,m,i,l,j,k; int a20,b20; while(scanf(%d,&m)!=EOF) for(i=0;i9;i+) ai=10*i; for(i=0;i10;i+) if(mi;j-) aj=aj-1; ai=m; elsea9=m; for(i=0;i10;i+) if(i!=9) printf(%d ,ai); elseprintf(%dn,ai); 3539: N个数从小到大排序Time Limit: 1 SecMemory Limit: 64 MBSubmit: 5854Solved: 2635Description输入一个正整数N和N个整数,将它们按从小到大的顺序进行排序后输出。 Input多组测试数据,每组输入一个正整数N(1N100)和N个整数,用空格分隔。 O

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 自然科学

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。