当前位置:   article > 正文

牛客网刷题篇_牛客刷题

牛客刷题

 ced485cbb11e458d81a746890b32cf3f.gif

作者:敲代码の流川枫

博客主页:流川枫的博客

专栏:C语言从入门到进阶

语录:Stay hungry stay foolish

工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器——牛客网

点击免费注册和我一起刷题吧 

文章目录

1. 矩阵转置

2. 上三角矩阵判定

3. 有序序列判断

4. 小乐乐与欧几里得 

5. 空心正方形图案

6. 箭形图案

7. 公务员面试

点击免费注册后点击下方标题来刷题吧

1. 矩阵转置

57c912bb4adb42558e60bafd1f8b10d0.png

 

 解题思路
在输入矩阵a的时候,同时将对应值赋给转置矩阵b,最后输出即可

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. int main()
  4. {
  5. int n = 0;
  6. int m = 0;
  7. int i = 0;
  8. int j = 0;
  9. int arr[10][10] = { 0 };
  10. scanf("%d %d", &n,&m);
  11. for (int i = 0; i < n; i++)
  12. {
  13. for (j = 0; j < m; j++)
  14. {
  15. scanf("%d", &arr[i][j]);
  16. }
  17. }
  18. //输出
  19. for (i = 0; i < m; i++)
  20. {
  21. for (j = 0; j < n; j++)
  22. {
  23. printf("%d ", arr[j][i]);
  24. }
  25. printf("\n");
  26. }
  27. return 0;
  28. }

d7a35a82fc5745a78eee2f6859f7e637.png

2. 上三角矩阵判定

0b28fe27be7b4ea2b3ddf54edc3aae5a.png

解题思路

对角线下方元素都为0则是上三角形矩阵,注意循环条件的控制

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. int main()
  4. {
  5. int n = 0;
  6. int i = 0;
  7. int j = 0;
  8. int arr[10][10] = { 0 };
  9. scanf("%d", &n);
  10. for (int i = 0; i < n; i++)
  11. {
  12. for (j = 0; j < n; j++)
  13. {
  14. scanf("%d", &arr[i][j]);
  15. }
  16. }
  17. int flag = 1;//是上三角形矩阵
  18. for (int i = 0; i < n; i++)
  19. {
  20. for (j = 0; j < i; j++)
  21. {
  22. if (arr[i][j] != 0)
  23. {
  24. flag = 0;
  25. goto end;
  26. }
  27. }
  28. }
  29. end:
  30. if (flag == 0)
  31. {
  32. printf("NO\n");
  33. }
  34. else
  35. printf("YES\n");
  36. }

d1abbf8ebb8c40daa44e89930bbf5e73.png

 每道题都有很多不同的解法,也有很多人分享自己的解题思路,可以讨论,见识到许多不同的思路,这也是我很喜欢牛客的原因之一

3. 有序序列判断

6009a7f4212c4b559e78fc296f7fc44b.png

 解题思路

当有一个数比下一个数大时,将flag1置为1;当有一个数比下一个数小时,flag2置为1;遍历结束,flag1+flag2>1则说明数组是无序的

  

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. int main()
  4. {
  5. int n = 0;
  6. scanf("%d", &n);
  7. int i = 0;
  8. int flag1 = 0;
  9. int flag2 = 0;
  10. int arr[100] = { 0 };
  11. for (i = 0; i < n; i++)
  12. {
  13. scanf("%d", &arr[i]);
  14. if (i > 0)
  15. {
  16. if (arr[i] > arr[i - 1])
  17. {
  18. flag1 = 1;
  19. }
  20. else if(arr[i]<arr[i-1])
  21. {
  22. flag2 = 1;
  23. }
  24. else
  25. {
  26. ;
  27. }
  28. }
  29. }
  30. if (flag1 + flag2 <= 1)
  31. {
  32. printf("sorted\n");
  33. }
  34. else
  35. {
  36. printf("unsorted\n");
  37. }
  38. return 0;
  39. }

3d237ec239b14e3690337c121a9df49a.png

牛客还支持各种语言,让你刷题没烦恼,还可以看排行里其他人的解法,总是会有很多解题的思路会让你受益

4. 小乐乐与欧几里得

ce9aa7db48144186b5453301f848d75f.png

 解题思路

求最大公约数常用的有两种方法,一是九章算术中的更相减损术:大数减小数直到相等,相等的数即最大公约数,该算法时间复杂度约为O(N);二是欧几里得的辗转相除法:大数除以小数取余数(相当于模运算),直到余数为零时(也即模运算为零时)的除数(也即模数)就是最大公约数,该算法时间复杂度约为O(logN)

求最小公倍数的方法:原始数据的乘积除以最大公约数

还要注意根据输入数据的范围确定变量的类型,否则会出现溢出

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. long long f(long long a, long long b)
  4. {
  5. long long c = 0;
  6. long long d = 1;
  7. while (d)
  8. {
  9. c = a / b;
  10. d = a % b;
  11. a = b;
  12. b = d;
  13. }
  14. return a;
  15. }
  16. int main()
  17. {
  18. long long a = 0;
  19. long long b = 0;
  20. long long ret = 0;
  21. long long e = 0;
  22. scanf("%lld%lld", &a, &b);
  23. if (a > b)
  24. {
  25. ret=f(a, b);
  26. }
  27. else
  28. {
  29. ret=f(b, a);
  30. }
  31. e = (a * b) / ret;
  32. printf("%lld\n", e + ret);
  33. return 0;
  34. }

3cc34e190a3e46ed867574da6519e8b7.png

 还有个强大的功能就是这里有许多大佬面试的经验,可以让我们了解大厂面试是什么样的

5. 空心正方形图案

7f61077dfc32406aac3e3de266c1a92b.png

解题思路

注意循环条件的控制

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. int main()
  4. {
  5. int n = 0;
  6. while (scanf("%d",&n) != EOF)
  7. {
  8. int i = 0;
  9. int j = 0;
  10. for (i = 0; i < n; i++)
  11. {
  12. for (j = 0; j < n; j++)
  13. {
  14. if ((i == 0) || (j == 0) || (i == n - 1) || (j == n - 1))
  15. {
  16. printf("* ");
  17. }
  18. else
  19. printf(" ");
  20. }
  21. printf("\n");
  22. }
  23. }
  24. return 0;
  25. }

 

c9c96e626cef48d7b319668c5667ec25.png

还有海量求职信息,为你的求职之路保驾护航 

6. 箭形图案

449e53b46f194c32bd9e3c928491dab3.png

 解题思路

本题可以将该图案拆分成上下两部分,对于上半部分设置space,star变量记录空格和星号的个数,然后对应自增和自减,然后补全后面的空格公式可以写成2*n+1-space-star
下半部分同理,重置space和star变量,然后对于自增和自减,补全空格输出即可

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main() {
  4. int n = 0;
  5. //循环读入n
  6. while(scanf("%d", &n) != EOF) {
  7. //设置space,star值的初始值
  8. int space = 2*n;
  9. int star = 1;
  10. //外循环开始遍历每一行
  11. for(int i = 0; i < n+1; ++i) {
  12. //挨个输出空格的个数
  13. for(int j = 0; j < space; ++j)
  14. printf(" ");
  15. //挨个输出星号的个数
  16. for(int j = 0; j < star; ++j)
  17. printf("*");
  18. //输出剩下的空格
  19. for(int j = 0; j < 2*n+1-space-star; ++j)
  20. printf(" ");
  21. //更新下一行的空格数和星号个数
  22. space -= 2;
  23. star += 1;
  24. printf("\n");
  25. }
  26. //下半部分的初值设置
  27. space = 2;
  28. star = n;
  29. //外循环开始遍历每一行,内循环流程和上述一样
  30. for(int i = 0; i < n; ++i) {
  31. for(int j = 0; j < space; ++j)
  32. printf(" ");
  33. for(int j = 0; j < star; ++j)
  34. printf("*");
  35. for(int j = 0; j < 2*n+1-space-star; ++j)
  36. printf(" ");
  37. //更新下一行的空格和星号个数
  38. space += 2;
  39. star -= 1;
  40. printf("\n");
  41. }
  42. }
  43. return 0;
  44. }

7. 公务员面试

61d4d6390b134c788ecef3239a037e15.png

 

解题思路

输入一个数时,就判定他的大小,并赋值给max,min,且用sum求和,输入数量等于7时,sum减去max,min,求出平均数即可

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. int main()
  4. {
  5. int n = 0;
  6. int score = 0;
  7. int max = 0;
  8. int min = 100;
  9. int sum = 0;
  10. while (scanf("%d", &score)==1)
  11. {
  12. n++;
  13. if (score > max)
  14. max = score;
  15. if (score < min)
  16. min = score;
  17. sum += score;
  18. if (n == 7)
  19. {
  20. printf("%.2lf\n",(sum - max - min) / 5.0);
  21. max = 0;
  22. min = 100;
  23. sum = 0;
  24. n = 0;
  25. }
  26. }
  27. return 0;
  28. }

“ 本期的分享就到这里了, 记得给博主一个三连哈,你的支持是我创作的最大动力!想要距离大厂更进一步吗?” 

点击免费注册和我一起刷题吧 

ced485cbb11e458d81a746890b32cf3f.gif

 

 

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号