当前位置:   article > 正文

蓝桥杯训练题C语言_蓝桥杯c语言

蓝桥杯c语言

开学后就很少抽空写写题了,所以这次只有几道题目和大家分享一下了。

有些真题也有些VIP基础题,想和大家分享一下。(有些是仿的其他博主的代码,,,,因为有些确实难(呜呜呜~))

不多说,上代码

1.时间转换

给定一个以秒为单位的时间t,要求用“<H>:<M>:<S>”的格式来表示这个时间。

<H>表示时间,<M>表示分钟,而<S>表示秒,它们都是整数且没有前导的“0”。

例如,若t=0,则应输出是“0:0:0”;若t=3661,则输出“1:1:1”。

一种解法:计算步骤为 时(t/3600)->分(t%3600/60)->秒(t%3600%60)

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int t,h,m,s;
  5. scanf("%d",&t);
  6. h=t/3600;
  7. m=(t%3600)/60;
  8. s=((t%3600)%60);
  9. printf("%d:%d:%d",h,m,s);
  10. return 0;
  11. }

钟另一种解法:计算步骤 秒(满60秒钟清零,分钟加1)->分(满60分钟清零,时加1)->时

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int h=0,m=0,s=0,i,n;
  5. scanf("%d",&n);
  6. for(i=0;i<n;i++)
  7. {
  8. s++;
  9. if(s==60)
  10. {
  11. m++;
  12. s=0;
  13. }
  14. if(m==60)
  15. {
  16. h++;
  17. m=0;
  18. }
  19. }
  20. printf("%d:%d:%d",h,m,s);
  21. return 0;
  22. }

2.字符串对比

给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:

  1:两个字符串长度不等。比如 Beijing 和 Hebei

  2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing

  3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing

  4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing

  编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。

易错:一定要区分3和4,不注意会将4误判成3,所以写代码一定要严谨,加上排除3的前提条件。

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5. char a[2][100];
  6. int i,n,k=0,m;
  7. scanf("%s%s",a[0],a[1]);
  8. for(i=0;a[0][i]!=0;i++)
  9. {
  10. if(strlen(a[0])==strlen(a[1])&&a[0][i]-a[1][i]!=32&&a[1][i]-a[0][i]!=32&&a[1][i]!=a[0][i])
  11. {
  12. printf("4");
  13. return 0;
  14. }
  15. }
  16. if(strlen(a[0])!=strlen(a[1])){printf("1");return 0;}
  17. else if(strcmp(a[0],a[1])==0){printf("2");return 0;}
  18. else {printf("3");return 0;}
  19. }

3.矩阵乘法

给定一个N阶矩阵A,输出A的M次幂(M是非负整数)

  例如:

  A =

  1 2

  3 4

  A的2次幂

  7 10

  15 22

强调:矩阵运算中   1.矩阵的0次幂为单位矩阵(对角线全为1,其余全为0)

                                2.矩阵的1次幂为原矩阵(矩阵本身)

                                3.矩阵a的m次幂=(a的m-1次幂)*矩阵a

                                步骤:a的第1行的第一个元素乘以b中第1列的第一个元素,a的第1行的第二个元素乘以b中第1列的第二个元素,结果相加存入c的第1行第1列,a的第1行的第1个元素乘以b中第二列的第1个元素,a的第二行的第二个元素乘以b中第二列的第二个元素,结果相加存入c的第1行第2列.。。。。a[i][k]*b[k][j]结果存入c[i][j]。

a的第i行和b的每一列相乘。

 

 

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int N,M,i,j,k,p,n=0;
  5. long long c[50][50],a[50][50],b[50][50];
  6. scanf("%d %d",&N,&M);
  7. for(i=0;i<N;i++)
  8. {
  9. for(j=0;j<N;j++)
  10. {
  11. scanf("%d",&a[i][j]);
  12. b[i][j]=a[i][j];
  13. }
  14. }
  15. if(M<=1)
  16. {
  17. for(i=0;i<N;i++)
  18. {
  19. for(j=0;j<N;j++)
  20. {
  21. if(M==0)
  22. {
  23. if(i==j)a[i][j]=1;
  24. else a[i][j]=0;
  25. printf("%d ",a[i][j]);
  26. }
  27. else printf("%d ",a[i][j]);
  28. }
  29. printf("\n");
  30. }
  31. }
  32. else
  33. {
  34. for(p=0;p<M-1;p++)
  35. {
  36. for(i=0;i<N;i++)
  37. {
  38. for(j=0;j<N;j++)
  39. {
  40. for(k=0;k<N;k++)
  41. {
  42. n+=a[i][k]*b[k][j];
  43. }
  44. c[i][j]=n;
  45. n=0;
  46. }
  47. }
  48. for(i=0;i<N;i++)
  49. {
  50. for(j=0;j<N;j++)
  51. {
  52. if(p==M-2)printf("%lld ",c[i][j]);
  53. else b[i][j]=c[i][j];
  54. }
  55. if(p==M-2)printf("\n");
  56. }
  57. }
  58. }
  59. return 0;
  60. }

4.矩形交面积

平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。

对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。

注意:题中只说明给出相对顶点的坐标,但是并没有明确说是哪两个(左下右上还是左上右下),所以要分多种考虑。给出下面分析:

 

  1. #include<stdio.h>
  2. double min(double a,double b)
  3. {
  4. if(a<b)return a;
  5. else return b;
  6. }
  7. double max(double a,double b)
  8. {
  9. if(a>b)return a;
  10. else return b;
  11. }
  12. int main()
  13. {
  14. double x1,y1,x2,y2,x3,y3,x4,y4,area,a1,a2,b1,b2;
  15. scanf("%lf%lf %lf%lf %lf%lf %lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
  16. a1=max(min(x1,x2),min(x3,x4));
  17. a2=min(max(x1,x2),max(x3,x4));
  18. b1=max(min(y1,y2),min(y3,y4));
  19. b2=min(max(y1,y2),max(y3,y4));
  20. if(a2>a1 && b2>b1)printf("%.2lf",(a2-a1)*(b2-b1));
  21. else printf("0.00");
  22. return 0;
  23. }

5.时间显示

输入一个毫秒值例如

46800999

要求输出

13:00:00

缺位补0

注意:设置时钟时一定要设置当时钟到达24时清零的动作,因为题目中给出的毫秒不一定是在一整天毫秒时间内(24小时->毫秒),可能存在不止一天的情况,但是题目只要求输出一天内的时、分、秒,所以要对时钟进行设置。

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int h=0,m=0,s=0,n,i;
  5. scanf("%d",&n);
  6. n/=1000;//转为秒
  7. for(i=0;i<n;i++)
  8. {
  9. s++;
  10. if(s==60)//进位分钟
  11. {
  12. s=0;
  13. m++;
  14. }
  15. if(m==60)//进位时钟
  16. {
  17. m=0;
  18. h++;
  19. }
  20. if(h==60)//时钟设置
  21. {
  22. h=0;
  23. }
  24. }
  25. printf("%.2d:%.2d:%.2d",h,m,s);//输出各为两位的时间数字
  26. return 0;
  27. }

6.门牌制作

小蓝要为一条街的住户制作门牌号。这条街一共有2020位住户,门牌号从1到2020编号。

小蓝制作门牌的方法是先制作0到9这几个数字字符,最后根据需要将字符粘贴到门牌上,

例如门牌1017需要依次粘贴字符1、0、1、7,即需要1个字符0,2个字符1,1个字符7。

请问要制作所有的1到2020号门牌,总共需要多少个字符2?

分析:对数进行分解,从个位、十位、百位....进行提取去判断是否为2,是则被记录,否则不做处理。

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i,j,k=0;
  5. for(i=1;i<2021;i++)
  6. {
  7. j=i;
  8. while(j)
  9. {
  10. if(j%10==2)k++;
  11. j/=10;
  12. }
  13. }
  14. printf("%d",k);
  15. }

在参考其他博主代码的基础上增加了些自己的见解,希望对大家的学习有用。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/222653
推荐阅读
相关标签
  

闽ICP备14008679号