算法标准答案.docx

上传人:s****u 文档编号:12745628 上传时间:2020-05-21 格式:DOCX 页数:151 大小:94.02KB
返回 下载 相关 举报
算法标准答案.docx_第1页
第1页 / 共151页
算法标准答案.docx_第2页
第2页 / 共151页
算法标准答案.docx_第3页
第3页 / 共151页
点击查看更多>>
资源描述
Problem H: 乘法口诀Time Limit: 1 SecMemory Limit: 64 MBSubmit: 11234Solved: 3034Description还记得以前小学时的九九乘法口诀吧。现在要求你编写程序打印出乘法口诀。 不过现在的乘法口诀表跟以前稍微有点区别,我告诉你一个数字n( 1 = n = 9),你要给我打出相应的nn乘法口诀表。Input多个测试数据。每个测试数据一行,输入整数n.Output输出nn乘法口诀表。 每个乘法口诀表中的任何一个乘式占6列,不足6列的在后面补空格。同一行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;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层金字塔。Sample 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 MBSubmit: 1344Solved: 656Description大酬宾活动的第三天,店里突然来了一个老外。还是高中生的小娥在开店。可怜的小娥被老外流畅的外语给吓蒙了。老外没办法,只好一个字母一个字母地把订单念给小娥。吓蒙的小娥只记得有几个元音字母了(aeiou),不过很不幸的是她把H也当作了A,Y当作了I.Input第一行输入一个整数n,表示老外说了多少句话。然后是n行,每一行是老外说的外语。Output对于老外说的每句话,请统计出小娥记得的各元音字母的个数(包含记错的),每个元音1行,格式见例子Sample Input2Hello.How are you!Sample Outputa:1e:1i: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,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 Input25Sample 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: 1 SecMemory Limit: 64 MBSubmit: 1819Solved: 750Description上次来定制的客户买走了不少瓷砖,确实给公司带来了不少利润,可是望着裁剪下来的瓷砖,陈盖历发愁了。这些尺寸不一的瓷砖堆的满地都是。哎,还是想个办法把他们堆成堆吧。当然堆的时候最大的要放在下面,绝对不允许大的瓷砖放在小的上面,否则变形了下次就不好卖了。你能帮忙把这些瓷砖堆起来吗?Input第一行输入一个整数n,表示共要堆成的堆数。然后是n行,每行先输入1个整数m,表示这一堆有m块瓷砖,然后紧跟着输入m个整数,表示瓷砖的尺寸Output对于每一堆输出一行,分别是该堆的瓷砖尺寸,按照从大到小进行排列,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;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几套房子。他的要求是这样的,他报出房间的长与宽(当然都是整数),然后你按照他的要求给他一个瓷砖的尺寸(正方形的,也是整数),以该尺寸的瓷砖能正好铺满他要求的房间。当然他希望瓷砖的数量越少越好。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;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* * * * * * *#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: 128 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=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 5Sample 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: 2593Description鹦鹉越来越会说话了,你可以说一句话(最多不要超过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: 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: 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); /输出修改后的字符串 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=getchar()!=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=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=(float)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,分别表示该段连续的整数中所有偶数的平方和以及所有奇数的立方和。你可以认为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 SecMemory 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=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 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 ,ai); 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; while(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数互质,那么称之为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. 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); 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后的数列。Input多组测试数据,每组输入一个整数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个整数,用空格分隔。 Output将这N个数按从小到大的顺序重新输出 Sample Input10 -4 5 12 88 23 -9 2 0 8 105 12 3 4 9 -2Sample Output-9 -4 0 2 5 8 10 12 23 88-2 3 4 9 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;jaj) t=ai; ai=aj; aj=t; elsecontinue; for(i=1;i=n;i+) if(i!=n) printf(%d ,ai); elseprintf(%dn,ai); 3537: 最大数与数列最后一个数交换Time Limit: 1 SecMemory Limit: 64 MBSubmit: 4345Solved: 1875Description输入一个正整数n( 1 n 100),再输入n个整数,将最后一个数与数列最大数交换位置(若最大数在数列最后,就不用交换),输出交换后的n个数。Input多组测试数据,每组先输入一个正整数n,再输入n个整数Output输出交换后的数列(即最大数在数列最后位置)Sample Input5 3 5 2 8 19 88 33 55 99 44 66 77 22 11Sample Output3 5 2 1 888 33 55 11 44 66 77 22 99#include int main() int i,j,max,n; int a100; while(scanf(%d,&n)!=EOF) for(i=0;in;i+) scanf(%d,&ai); max=a0; j=0; for(i=1;imax) max=ai; j=i; aj=an-1; an-1=max; for(i=0;in-1;i+) printf(%d ,ai); printf(%dn,an-1); return 0; 3886: 零起点学算法85数组中插入一个数Time Limit: 1 SecMemory Limit: 64 MBSubmit: 3497Solved: 1250Description给定有序数组(从小到大),再给你一个数,要求插入该数到数组中并保持顺序Input多组测试,每组第一行输入一个整数n,然后是n个有序的整数第二行输入1个整数m和1个整数KOutput将整数m插入到原数组中保持顺序是升序,然后输出2行第一行是插入以后的数组第二行是插入以后的数组中下标值是K的数 n m k不超过20Sample Input3 1 2 53 1Sample Output1 2 3 52#include int main() int n,m,i,l,j,k; int a21,b21; while(scanf(%d,&n)!=EOF) for(i=0;in;i+) scanf(%d,&ai); scanf(%d%d,&m,&k); for(i=0;in;i+) if(mi;j-) aj=aj-1; ai=m; elseai=m; for(i=0;i=n;i+) if(i!=n) printf(%d ,ai); elseprintf(%dn,ai); printf(%dn,ak); 3885: 零起点学算法84数组中删数IITime Limit: 1 SecMemory Limit: 64 MBSubmit: 4532Solved: 1678Description在给定的数组中删除数Input多组测试,每组第一行输入1个整数n(n20),然后是n个整数 第二行输入1个整数m Output删除在第一行的n个整数中的数字m(多个的话都要删除),然后按照顺序输出剩下的数, Sample Input5 1 2 3 4 33 Sample Output1 2 4#include int main() int n,m,i,l,j,k; int a21,b21; while(scanf(%d,&n)!=EOF) for(i=0;in;i+) scanf(%d,&ai); scanf(%d,&m); for(i=0;in;i+) if(m=ai) if(i!=n-1) continue; elseprintf(n); else if(i!=n-1) printf(%d ,ai); elseprintf(%dn,ai); Problem A: 零起点学算法83数组中删数Time Limit: 1 SecMemory Limit: 64 MBSubmit: 7443Solved: 2254Description在给定的数组中删除一个数 Input多组测试,每组第一行输入1个整数n(n20),然后是n个整数 第二行输入1个整数m Output删除在第一行的n个整数中第一次出现数字m并删除,然后按照顺序输出剩下的数, Sample Input4 1 2 3 43Sample Output1 2 4HINTm有可能在原数组中找不到,找不到则输出原数组#include int main() int n,a20,i,m; while(scanf(%d,&n)!=EOF) for(i=0;in;i+) scanf(%d,&ai); scanf(%d,&m); for(i=0;in;i+) if(ai=m) int j; for(j=i;jn-1;j+) aj=aj+1; break; int t=n-1; if(i!=n)t-; for(i=0;it;i+) printf(%d ,ai); printf(%dn,ai); return 0; Problem A: 零起点学算法82数组中查找数Time Limit: 1 SecMemory Limit: 64 MBSubmit: 7125Solved: 3536Description在给定的数组中查找一个数Input多组测试,每组第一行输入1个整数n(n20),然后是n个整数第二行输入1个整数mOutput查找在第一行的n个整数中第一次出现数字m的下标位置并输出,如果没有找到则输出NoSample Input3 4 5 654 2 2 2 22Sample Output10#include int main() int n,a20; int i,j,m; while (scanf(%d, &n) != EOF) for(i=0; in; i+) scanf(%d,&ai); scanf(%d,&m); for(j=0; jn; j+) if(aj=m) printf(%dn,j); break; if(j
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!