深圳幻海软件技术有限公司 欢迎您!

C/C++的刷题练习之牛客网,一个友好的网站

2023-03-30

✅作者简介:一名即将大三的计科专业学生,为C++,Java奋斗中✨个人主页:叶落秋白的主页🔥系列专栏:牛客刷题专栏📃推荐一款模拟面试、刷题神器👉注册即可免费刷题🔥前言 一次偶然的机会我登上了牛客网的页面,在我练习c和c++的题时,我发现了这个网站的很多优点,让我很是舒心,例如:&n

✅作者简介:一名即将大三的计科专业学生,为C++,Java奋斗中

✨个人主页:叶落秋白的主页

🔥系列专栏:牛客刷题专栏

📃推荐一款模拟面试、刷题神器👉注册即可免费刷题

🔥前言

 一次偶然的机会我登上了牛客网的页面,在我练习c和c++的题时,我发现了这个网站的很多优点,让我很是舒心,例如:

        1、干净整洁且具有强提示的代码高亮

        2、练习题内容紧凑,很适合系统的复习、巩固

        3、调试、运行代码方便

        4、模拟大厂的面试题很丰富

        因此很推荐大家来这儿坚持日常刷题,哪怕每天只刷一道题也会丰富自己的知识,让自己任何时候都不会出现不认识代码的情况。下面我分享一些我个人在牛客网刷到并解决的题,浅浅的解析,欢迎大家交流指正!

📃目录

C语言经典基础题

牛牛的新数组求和

牛牛的排序

C++经典例题

选择排序

数组元素反转

函数计算阶乘

📃结语


C语言经典基础题

牛牛的新数组求和

题目:

我的答案:

  1. #include <iostream>
  2. using namespace std;
  3. void Init_Array(int *array,int n)
  4. {
  5. int value=0;
  6. for(int i=0;i<n;i++){
  7. cin>>value;
  8. array[i]=value;
  9. }
  10. }
  11. int cal(int *array,int n)
  12. {
  13. int sum=0;
  14. for(int i=0;i<n;i++){
  15. sum+=array[i];
  16. }
  17. return sum;
  18. }
  19. int main() {
  20. int n=0;
  21. cin>>n;//输入数组个数
  22. int *array=new int[n];
  23. Init_Array(array,n);//初始化数组
  24. cout<<cal(array,n);
  25. delete []array;
  26. }

题解: 

        其实这题很基础,考查的就是数组求和的知识,我这样写反而会复杂一点,牺牲了空间但是换取了时间的效率。首先将数组开辟在堆区,这样就能动态确定数组的容量,然后写一个函数进行数组元素的赋值,最后调用求和函数返回最终结果并输出即可。

牛牛的排序

题目:

 我的答案:

  1. #include <iostream>
  2. using namespace std;
  3. void sort(int *array,int n)
  4. {
  5. for(int i=0;i<n;i++){
  6. for(int j=0;j<n-i-1;j++){
  7. if(array[j]>array[j+1]){
  8. int t=array[j];
  9. array[j]=array[j+1];
  10. array[j+1]=t;
  11. }
  12. }
  13. }
  14. for(int i=0;i<n;i++){
  15. cout<<array[i]<<" ";
  16. }
  17. }
  18. int main() {
  19. int n=0,v=0;
  20. cin>>n;
  21. int arr[n];
  22. for(int i=0;i<n;i++){
  23. cin>>v;
  24. arr[i]=v;
  25. }
  26. sort(arr, n);
  27. }

题解: 

        这题就是非常经典的数组排序问题了,写一个函数包含冒泡排序就可以,如果冒泡排序或者选择排序不太熟练的朋友可以再去回顾回顾知识。

C++经典例题

选择排序

 我的答案:

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int arr[6] = { 0 };
  6. int len = sizeof(arr) / sizeof(int);
  7. for (int i = 0; i < len; i++) {
  8. cin >> arr[i];
  9. }
  10. // write your code here......
  11. for(int i=0;i<len-1;i++)
  12. {
  13. for(int j=i+1;j<len;j++)
  14. {
  15. if(arr[i]>arr[j])
  16. {
  17. int t=arr[i];
  18. arr[i]=arr[j];
  19. arr[j]=t;
  20. }
  21. }
  22. }
  23. for(int i=0;i<len;i++){
  24. cout<<arr[i]<<" ";
  25. }
  26. return 0;
  27. }

题解:

        毫无疑问,选择排序和冒泡排序是算法的基础知识,这两个在一起比较的话要注意他们遍历的范围,注意不要让数组越界

数组元素反转

 题目:

这里牛客网已经给出了输出的格式:

顺着代码往后写:

  1. //指向首尾的双指针
  2. int left = 0;
  3. int right = len-1;
  4. while(left<right)
  5. {
  6. //对首尾的指针进行移动
  7. int temp = arr[left];
  8. arr[left] = arr[right];
  9. arr[right] = temp;
  10. left++;
  11. right--;
  12. }

题解:

        这是一个简单双指针的实际运用,将数组两边数组反转,只需要在低边界小于高边界的时候两头反转之后将指针修改即可。

函数计算阶乘

题目:

我的答案:

  1. #include <iostream>
  2. using namespace std;
  3. long long factorial(int n);
  4. int main() {
  5. int n;
  6. cin >> n;
  7. cout << factorial(n) << endl;
  8. return 0;
  9. }
  10. long long factorial(int n) {
  11. // write your code here......
  12. if(n==0){
  13. return 1;
  14. }
  15. else if(n>0){
  16. return n*factorial(n-1);
  17. }else{
  18. return -1;
  19. }
  20. }

 题解:

        经典阶乘问题,这里利用递归来解决最为舒心了。我们知道0的阶乘是1,小于0不存在阶乘,直接返回-1。而且我们只知道n为0时结果为一,那么就可以来一个套娃的操作,当n大于1时,返回n乘以该函数,参数列表传入n-1,这样直到n-1等于0时,程序开始计算n的阶乘,就能得到最终结果。

图解:

📃结语

        如果感到无聊,何不打开牛客网刷刷题解解闷呢,这里开个小玩笑。讲真的,如果时间足够,我们一起刷题交流进步,愿你我未来在顶峰相见!!!

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览42515 人正在系统学习中
商务合作/技术交流/干货分享
微信名片