蓝桥杯练习系统题目汇总
蓝桥杯练习系统题目汇总:入门训练1. Fibonacci数列 问题描述Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。当n比较大时,Fn也非常大,目前我们想懂得,Fn除以10007的余数是多少。输入格式输入涉及一种整数n。输出格式输出一行,涉及一种整数,表达Fn除以10007的余数。阐明:在本题中,答案是规定Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的精确值,再将计算的成果除以10007取余数,直接计算余数往往比先算出原数再取余简朴。样例输入10样例输出55样例输入22样例输出7704数据规模与商定1 <= n <= 1,000,000。参照代码:c+1. #include <stdlib.h>2. #include <stdio.h>3. #define MOD 100074. #define MAXN 10000015. int n, i, FMAXN;6. int main()7. 8. scanf("%d", &n);9. F1 = 1;10. F2 = 1;11. for (i = 3; i <= n; +i)12. Fi = (Fi-1 + Fi-2) % MOD;13. printf("%dn", Fn);14. return 0;15. java:1. import java.util.Scanner;2. public class Main3. public static void main(String args) 4. Scanner scanner = new Scanner(System.in) 5. int num = scanner.nextInt() 6. int a = new intnum+2 7. a1 = a2 = 1;8. if (num = 1) 9. anum = 1 10. else if (num = 2) 11. anum = 1 12. else 13. for (int i = 3; i <= num; i+) 14. ai = (ai - 1 + ai - 2) % 10007 15. 16. 17. System.out.println(anum);18. 19. 2. 实数输出问题描述给定圆的半径r,求圆的面积。输入格式输入涉及一种整数r,表达圆的半径。输出格式输出一行,涉及一种实数,四舍五入保存小数点后7位,表达圆的面积。阐明:在本题中,输入是一种整数,但是输出是一种实数。对于实数输出的问题,请一定看清晰实数输出的规定,例如本题中规定保存小数点后7位,则你的程序必须严格的输出7位小数,输出过多或者过少的小数位数都是不行的,都会被觉得错误。实数输出的问题如果没有特别阐明,舍入都是按四舍五入进行。样例输入4样例输出50.2654825数据规模与商定1 <= r <= 10000。提示本题对精度规定较高,请注意的值应当取较精确的值。你可以使用常量来表达,例如PI=3.979323,也可以使用数学公式来求,例如PI=atan(1.0)*4。c+1. #include <stdio.h>2. #include <math.h>3. int main()4. 5. int r;6. double s, PI;7. scanf("%d", &r);8. PI = atan(1.0) * 4;9. s = PI * r * r;10. printf("%.7lf", s);11. return 0;12. java:1. import java.util.Scanner;2. public class Main3. private static final double PI = 3.979323;4. public static void main(String args) 5. int r = new Scanner(System.in).nextInt();6. if(1 <= r && r <= 10000) 7. double circular = PI*r*r;8. String result = String.format("%.7f", circular);9. System.out.println(result); 10. 11. 12. 3. 求和公式问题描述求1+2+3+.+n的值。输入格式输入涉及一种整数n。输出格式输出一行,涉及一种整数,表达1+2+3+.+n的值。样例输入4样例输出10样例输入100阐明:有某些试题会给出多组样例输入输出以协助你更好的做题。一般在提交之前所有这些样例都需要测试通过才行,但这不代表这几组样例数据都对的了你的程序就是完全对的的,潜在的错误也许仍然导致你的得分较低。样例输出5050数据规模与商定1 <= n <= 1,000,000,000。阐明:请注意这里的数据规模。本题直接的想法是直接使用一种循环来累加,然而,当数据规模很大时,这种“暴力”的措施往往会导致超时。此时你需要想想其她措施。你可以试一试,如果使用作为你的程序的输入,你的程序是不是能在规定的上面规定的时限内运营出来。本题另一种要值得注意的地方是答案的大小不在你的语言默认的整型(int)范畴内,如果使用整型来保存成果,会导致成果错误。如果你使用C+或C语言并且准备使用printf输出成果,则你的格式字符串应当写成%I64d以输出long long类型的整数。c+:1. #include <iostream>2. using namespace std;3. int main()4. 5. long long n;6. cin >> n;7. cout << (1+n) * n / 2;8. return 0;9. c:1. #include <stdio.h>2. int main()3. 4. int n;5. long long ret = 0, tmp;6. scanf("%d", &n);7. tmp = n;8. printf("%I64d", (1+tmp) * tmp / 2);9. return 0;10. java:1. import java.io.BufferedReader;2. import java.io.IOException;3. import java.io.InputStreamReader;4. public class Main 5. public static void main(String args) throws NumberFormatException, IOException6. BufferedReader strin = new BufferedReader(new InputStreamReader(System.in);7. long i = Integer.parseInt(strin.readLine();8. long sum = (1+i)*i/2;9. System.out.println(sum);10. 11. 4. A+B问题问题描述输入A、B,输出A+B。阐明:在“问题描述”这部分,会给出试题的意思,以及所规定的目的。输入格式输入的第一行涉及两个整数,由空格分隔,分别表达A、B。阐明:“输入格式”是描述在测试你的程序时,所给的输入一定满足的格式。做题时你应当假设所给的输入是一定满足输入格式的规定的,因此你不需要对输入的格式进行检查。多余的格式检查也许会适得其反,使用你的程序错误。在测试的时候,系统会自动将输入数据输入到你的程序中,你不能给任何提示。例如,你在输入的时候提示“请输入A、B”之类的话是不需要的,这些多余的输出会使得你的程序被鉴定为错误。输出格式输出一行,涉及一种整数,表达A+B的值。阐明:“输出格式”是规定你的程序在输出成果的时候必须满足的格式。在输出时,你的程序必须满足这个格式的规定,不能少任何内容,也不能多任何内容。如果你的内容和输出格式规定的不同样,你的程序会被判断为错误,涉及你输出了提示信息、中间调试信息、计时或者记录的信息等。样例输入12 45阐明:“样例输入”给出了一组满足“输入格式”规定的输入的例子。这里给出的输入只是也许用来测试你的程序的一种输入,在测试的时候,还会有更多的输入用来测试你的程序。样例输出57阐明:“样例输出”给出了一组满足“输出格式”规定的输出的例子。样例输出中的成果是和样例输入中的是相应的,因此,你可以使用样例的输入输出简朴的检查你的程序。要特别指出的是,可以通过样例输入输出的程序并不一定是对的的程序,在测试的时候,会用诸多组数据进行测试,而不局限于样例数据。有也许一种程序通过了样例数据,但测试的时候仍只能得0分,也许由于这个程序只在某些类似样例的特例中对的,而不具有通用性,再测试更多数据时会浮现错误。例如,对于本题,如果你写一种程序不管输入是什么都输入57,则样例数据是对的,但是测试其她数据,哪怕输入是1和2,这个程序也输出57,则对于其她数据这个程序都不对的。数据规模与商定-10000 <= A, B <= 10000。阐明:“数据规模与商定”中给出了试题中重要参数的范畴。这个范畴对于解题非常重要,不同的数据范畴会导致试题需要使用不同的解法来解决。例如本题中给的A、B范畴不大,可以使用整型(int)来保存,如果范畴更大,超过int的范畴,则要考虑其她措施来保存大数。有某些范畴在以便的时候是在“问题描述”中直接给的,因此在做题时不仅要看这个范畴,还要注意问题描述。提示本题的C+源代码如下:1. #include <iostream>2. 3. using namespace std;4. 5. int main()6. 7. int a, b;8. cin >> a >> b;9. cout << a + b;10. return 0;11. 本题的C源代码如下:1. #include <stdio.h>2. 3. int main()4. 5. int a, b;6. scanf("%d%d", &a, &b);7. printf("%d", a+b);8. return 0;9. 本题的Java源代码如下:1. import java.util.*;2. 3. public class Main4. 5. public static void main(String args)6. 7. Scanner sc = new Scanner(System.in);8. Integer a = sc.nextInt();9. Integer b = sc.nextInt();10. System.out.println(a + b);11. 12. 阐明:要答题,请点击页面上方的“提交此题”按钮,页面将跳转到提交代码的页面,选择好你的编译语言,将你的编写好的代码粘贴到代码框中,再点击“提交答案”即可。你的答案提交给系统后系统会自动对你的代码进行判分,并跳转到成果的列表里面,你可以直接从列表中看到你提交的代码的状态,一般几秒钟后就可以看到判分的成果。本题作为第一题,在提示中已经分别给了C+和Java的代码,你可以直接把这个代码拷贝过去作为自己的代码提交。请特别注意,Java的主类名必须是Main。 基本练习1. 基本练习 闰年判断问题描述给定一种年份,判断这一年是不是闰年。当如下状况之一满足时,这一年是闰年:1. 年份是4的倍数而不是100的倍数;2. 年份是400的倍数。其她的年份都不是闰年。输入格式输入涉及一种整数y,表达目前的年份。输出格式输出一行,如果给定的年份是闰年,则输出yes,否则输出no。阐明:当试题指定你输出一种字符串作为成果(例如本题的yes或者no,你需要严格按照试题中给定的大小写,写错大小写将不得分。样例输入样例输出no样例输入样例输出yes数据规模与商定1990 <= y <= 2050。c+:1. #include <iostream>2. using namespace std;3. int main()4. 5. int y;6. cin >> y;7. if (y%4=0 && y%100!=0 | y%400=0)8. cout << "yes" << endl;9. else10. cout << "no" << endl;11. return 0;12. c:1. #include <stdio.h>2. int main()3. 4. int y;5. scanf("%d", &y);6. if (y%4=0 && y%100!=0 | y%400=0)7. printf("yes");8. else9. printf("no");10. return 0;11. java:1. import java.io.BufferedReader;2. import java.io.IOException;3. import java.io.InputStreamReader;4.5.6. public class Main 7. public static void main(String args) throws NumberFormatException, IOException8. BufferedReader strin = new BufferedReader(new InputStreamReader(System.in);9. int i = Integer.parseInt(strin.readLine();10. if(i%4=0&&i%100!=0)|i%400=0)11. System.out.print("yes");12. else13. System.out.print("no");14. 15. 16.17. 2. 基本练习 01字串 问题描述对于长度为5位的一种01串,每一位都也许是0或1,一共有32种也许。它们的前几种是:0000000001000100001100100请按从小到大的顺序输出这32种01串。输入格式本试题没有输入。输出格式输出32行,按从小到大的顺序每行一种长度为5的01串。样例输出00000000010001000011<如下部分省略>1. #include <iostream>2. using namespace std;3. int main()4. 5. for (int i = 0; i <= 1; +i)6. for (int j = 0; j <= 1; +j)7. for (int k = 0; k <= 1; +k)8. for (int l = 0; l <= 1; +l)9. for (int m = 0; m <= 1; +m)10. cout << i << j << k << l << m << endl;11. return 0;12. 1. #include <stdio.h>2. int main()3. 4. int i, j, k, l, m;5. for (i = 0; i <= 1; +i)6. for (j = 0; j <= 1; +j)7. for (k = 0; k <= 1; +k)8. for (l = 0; l <= 1; +l)9. for (m = 0; m <= 1; +m)10. printf("%d%d%d%d%dn", i, j, k, l, m);11. return 0;12. 1. 2. public class Main3. public static void main (String args)4. 5. for(int a1=0;a1<2;a1+)6. for(int a2=0;a2<2;a2+)7. for(int a3=0;a3<2;a3+)8. for(int a4=0;a4<2;a4+)9. for(int a5=0;a5<2;a5+)10. StringBuffer s=new StringBuffer();11. System.out.println(s.append(a1).append(a2).append(a3).append(a4).append(a5);12. 13. 14. 15. 16. 17.18. 19. 3. 基本练习 字母图形问题描述运用字母可以构成某些美丽的图形,下面给出了一种例子:ABCDEFGBABCDEFCBABCDEDCBABCDEDCBABC这是一种5行7列的图形,请找出这个图形的规律,并输出一种n行m列的图形。输入格式输入一行,涉及两个整数n和m,分别表达你要输出的图形的行数的列数。输出格式输出n行,每个m个字符,为你的图形。样例输入5 7样例输出ABCDEFGBABCDEFCBABCDEDCBABCDEDCBABC数据规模与商定1 <= n, m <= 26。c+1. #include <iostream>2. #include <cmath>3. using namespace std;4. int main()5. 6. int n, m;7. cin >> n >> m;8. for (int i = 0; i < n; +i)9. 10. for (int j = 0; j < m; +j)11. cout << char('A'+abs(i-j);12. cout << endl;13. 14. return 0;15. c1. #include <stdio.h>2. #include <stdlib.h>3. #define MAXSIZE 264.5. /输出6. void Print(char matrixMAXSIZEMAXSIZE,int n,int m)7. 8. int i,j;9. for(i=0;i<n;i+)10. 11. for(j=0;j<m;j+)12. 13. printf("%c",matrixij);14. 15. printf("n");16. 17. 18.19. /实现字母图形20. void Drawing(int n,int m)21. 22. int i,j;23. int point=0;24. char str;25. char matrixMAXSIZEMAXSIZE;26. for(i=0;i<n;i+)27. 28. str='A'29. for(j=i;j<m;j+)30. 31. matrixij=str+;32. 33. str='A'34. for(j=i-1;j>=0;j-)35. 36. matrixij=+str;37. 38. 39. Print(matrix,n,m);40. 41. int main()42. 43. int n,m;44. scanf("%d%d",&n,&m);45. Drawing(n,m);46. return 0;47. java1. import java.io.BufferedReader;2. import java.io.IOException;3. import java.io.InputStreamReader;4.5.6. public class Main 7. public static void main(String args) throws NumberFormatException, IOException8. BufferedReader strin = new BufferedReader(new InputStreamReader(System.in);9. String s = strin.readLine();10. String st = s.split(" ");11. char c = new charInteger.parseInt(st1);12. int time = 0;13. int timemax = Integer.parseInt(st0);14. for(int i=0;i<c.length;i+)15. ci = (char) ('B'+i);16. 17. for(int k=0;k<timemax;k+)18. for(int j =0;j<c.length;j+)19. if(j<time)20. cj=(char) (cj+1);21. 22. if(j>=time)23. cj=(char) (cj-1);24. 25. 26. time+;27. System.out.print(c);28. System.out.println();29. 30. 31. 32.基本练习 数列特性问题描述给出n个数,找出这n个数的最大值,最小值,和。输入格式第一行为整数n,表达数的个数。第二行有n个数,为给定的n个数,每个数的绝对值都不不小于10000。输出格式输出三行,每行一种整数。第一行表达这些数中的最大值,第二行表达这些数中的最小值,第三行表达这些数的和。样例输入51 3 -2 4 5样例输出5-23数据规模与商定1 <= n <= 10000。1. #include<cstdio>2. #include<iostream>3. #include<algorithm>4. #include<cstring>5.6. using namespace std;7.8. int main()9. int n;10. while(cin>>n)11. int a10005;12. int sum=0;13. for(int i=0;i<n;i+)14. scanf("%d",&ai);15. sum+=ai;16. 17. sort(a,a+n);18. cout<<an-1<<endl<<a0<<endl<<sum<<endl;19. 20. return 0;21. 22.1. #include <stdio.h>2. #include <stdlib.h>3. #define MAXSIZE 100004.5. int main()6. 7. int i;8. int n;9. int value;10. int max=-MAXSIZE;11. int min=MAXSIZE;12. int sum=0;13. scanf("%d",&n);14. for(i=0;i<n;i+)15. 16. scanf("%d",&value);17. if(value>max) max=value;18. if(value<min) min=value;19. sum+=value;20. 21. printf("%dn",max);22. printf("%dn",min);23. printf("%dn",sum);24. return 0;25. 26. import java.io.*;27. public class Main28. public static void main(String args)throws Exception29. int n;30. int sum=0;31. String str=null;32. String str2=null;33. BufferedReader buf=new BufferedReader(new InputStreamReader(System.in);34.35. str=buf.readLine();36. n=Integer.parseInt(str);37. 38. str2=buf.readLine();39. String a=str2.split(" ");40. int array2=new intn;41. for(int i=0;i<n;i+)42. 43. array2i=Integer.parseInt(ai);44. sum=sum+array2i;45. 46. java.util.Arrays.sort(array2);47. System.out.println(array2n-1);48. System.out.println(array20);49. System.out.println(sum);50. 51. 52. 基本练习 查找整数问题描述给出一种涉及n个整数的数列,问整数a在数列中的第一次浮现是第几种。输入格式第一行涉及一种整数n。第二行涉及n个非负整数,为给定的数列,数列中的每个数都不不小于10000。第三行涉及一种整数a,为待查找的数。输出格式如果a在数列中浮现了,输出它第一次浮现的位置(位置从1开始编号),否则输出-1。样例输入61 9 4 8 3 99样例输出2数据规模与商定1 <= n <= 1000。1. #include <iostream>2. using namespace std;3. const int MAXN = 10001;4. int n, a, ans;5. int sMAXN;6. int main()7. 8. cin >> n;9. for (int i = 0; i < n; +i)10. cin >> si;11. cin >> a;12. ans = -1;13. for (int i = 0; i < n; +i)14. 15. if (si = a)16. 17. ans = i + 1;18. break;19. 20. 21. cout << ans << endl;22. return 0;23. 1. #include <stdio.h>2. #define MAXN 100013. int n, a, ans;4. int sMAXN;5. int main()6. 7. int i;8. scanf("%d", &n);9. for (i = 0; i < n; +i)10. scanf("%d", &si);11. scanf("%d", &a);12. ans = -1;13. for (i = 0; i < n; +i)14. 15. if (si = a)16. 17. ans = i + 1;18. break;19. 20. 21. printf("%d", ans);22. return 0;23. import java.io.*;24. public class Main 25. public static void main (String args)throws Exception26. BufferedReader sc=new BufferedReader(new InputStreamReader(System.in);27. int n=Integer.parseInt(sc.readLine();28. String str=sc.readLine();29. String s=str.split(" ");30. String s2=sc.readLine();31. int x=Integer.parseInt(s2);32. int a=new intn;33. for(int j=0;j<s.length;j+)34. aj=Integer.parseInt(sj);35. 36. for(int i=0;i<s.length;i+)37. if(i=s.length-1&&x!=as.length-1)38. System.out.println(-1);39. break;40. 41. if(x=ai)42. System.out.println(i+1);43. break;44. 45. 46. 47. 48. 49. 50. 基本练习 杨辉三角形问题描述杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。它的一种重要性质是:三角形中的每个数字等于它两肩上的数字相加。下面给出了杨辉三角形的前4行: 1 1 1 1 2 11 3 3 1给出n,输出它的前n行。输入格式输入涉及一种数n。输出格式输出杨辉三角形的前n行。每一行从这一行的第一种数开始依次输出,中间使用一种空格分隔。请不要在前面输出多余的空格。样例输入4样例输出11 11 2 11 3 3 1数据规模与商定1 <= n <= 34。1. #include <iostream>2. using namespace std;3. const int MAXN = 40;4. int n;5. int aMAXNMAXN;6. int main()7. 8. cin >> n;9. a00 = 1;10. for (int i = 0; i < n; +i)11. 12. ai0 = aii = 1;13. for (int j = 1; j < i; +j)14. aij = ai-1j-1 + ai-1j;15. 16. for (int i = 0; i < n; +i)17. 18. for (int j = 0; j <= i; +j)19. cout << aij << " "20. cout << endl;21. 22. return 0;23. 1. #include <stdio.h>2. #define MAXN 403. int n;4. int aMAXNMAXN;5. int main()6. 7. int i, j;8. scanf("%d", &n);9. a00 = 1;10. for (i = 0; i < n; +i)11. 12. ai0 = aii = 1;13. for (j = 1; j < i; +j)14. aij = ai-1j-1 + ai-1j;15. 16. for (i = 0; i < n; +i)17. 18. for (j = 0; j <= i; +j)19. printf("%d ", aij);20. printf("n");21. 22. return 0;23. 1. import java.io.BufferedReader;2. import java.io.IOException;3. import java.io.InputStreamReader;4.5.6. public class Main 7. public static void main(String args) throws NumberFormatException, IOException8. BufferedReader strin = new BufferedReader(new InputStreamReader(System.in);9. int time = Integer.parseInt(strin.readLine();10. int triangle = new inttimetime;11. triangle00 = 1;12. /System.out.print(triangle00);13. for(int j=0;j<time;j+)14. for(int i=0;i<j+1;i+)15. if(i=0)16. triangleji=1;17. else18. triangleji = trianglej-1i-1+trianglej-1i; 19. 20. System.out.print(triangleji);21. System.out.print(" ");22. 23. System.out.println();24. 25. 26. 27.基本练习 特殊的数字问题描述153是一种非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。输出格式按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。1. #include<iostream>2. using namespace std;3. int main()4. 5. int i,j,k;6. for(i=1;i<=9;i+)7. 8. for(j=0;j<=9;j+)9. 10. for(k=0;k<=9;k+)11. 12. if(i*100+j*10+k=i*i*i+j*j*j+k*k*k)13. 14. cout<<i*100+j*10+k<<endl;15. 16. 17. 18. 19. return 0;20. 1. #include<stdio.h>2. int main()3. 4. int i,j,k,n;5. for(n=100;n<1000;n+)6. 7. i=n/100;8. j=n/10%10;9. k=n%10;10. if(i*100+j*10+k=i*i*i+j*j*j+k*k*k)11. printf("%dn",n);12. 13. return 0;14. 1. import java.util.Scanner;2. public class Main3. public static void main(String args) 4. for(int i=100; i<1000; i+)5. int a = i%10;6. int b = i/10%10;7. int c = i/100;8. if(i = a*a*a + b*b*b + c*c*c) 9. System.out.println(i); 10. 11. 12. 13. 14. 基本练习 回文数问题描述1221是一种非常特殊的数,它从左边读和从右边读是同样的,编程求所有这样的四位十进制数。输出格式按从小到大的顺序输出满足条件的四位十进制数。1. #include<stdio.h>2. int main()3. 4. for(int i1=1;i1<10;i1+)5. 6. for(int i2=0;i2<10;i2+)7. 8. for(int i3=0;i3<10;i3+)9. 10. for(int i4=0;i4<10;i4+)11. 12. if(i1=i4 && i2=i3)13. printf("%d%d%d%dn",i1,i2,i3,i4);14. 15. 16. 17. 18. 19. return 0;20. 21. #include<stdio.h>22. int main()23. 24. int a,b,c,d,i;25. for(i=1000;i<=9999;i+)26. 27. a=i/1000;28. b=i/100%10;29. c=i/10%10;30. d=i%10;31. if(a=d&&b=c)32. printf("%dn",i);33. 34. return 0;35. 1. import java.io.*;2. import java.util.*;3. import java.math.*;4. import java.text.*; 5. import