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


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

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

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

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

    🔥前言

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

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

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

            3、调试、运行代码方便

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

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

    📃目录

    C语言经典基础题

    牛牛的新数组求和

    牛牛的排序

    C++经典例题

    选择排序

    数组元素反转

    函数计算阶乘

    📃结语


    C语言经典基础题

    牛牛的新数组求和

    题目:

    我的答案:

    1. #include
    2. using namespace std;
    3. void Init_Array(int *array,int n)
    4. {
    5. int value=0;
    6. for(int i=0;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
    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
    2. using namespace std;
    3. void sort(int *array,int n)
    4. {
    5. for(int i=0;i
    6. for(int j=0;j-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
    15. cout<" ";
    16. }
    17. }
    18. int main() {
    19. int n=0,v=0;
    20. cin>>n;
    21. int arr[n];
    22. for(int i=0;i
    23. cin>>v;
    24. arr[i]=v;
    25. }
    26. sort(arr, n);
    27. }

    题解: 

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

    C++经典例题

    选择排序

     我的答案:

    1. #include
    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-1;i++)
    12. {
    13. for(int j=i+1;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
    24. cout<" ";
    25. }
    26. return 0;
    27. }

    题解:

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

    数组元素反转

     题目:

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

    顺着代码往后写:

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

    题解:

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

    函数计算阶乘

    题目:

    我的答案:

    1. #include
    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的阶乘,就能得到最终结果。

    图解:

    📃结语

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

  • 相关阅读:
    Error: Member not found: ‘FirebaseAppPlatform.verifyExtends‘
    centos使用root用户登录
    附录5-vscode常用配置
    OSS云存储的权限控制
    2022年SQL大厂高频实战面试题(详细解析)
    ZIP文件怎么打开?值得收藏的3个方法!
    4、AQS之ReentrantReadWriteLock
    python模式设计之责任链模式
    检测代码中泄漏的goroutine
    STM32F4VGT6-DISCOVERY:uart1驱动
  • 原文地址:https://blog.csdn.net/m0_58618795/article/details/125668474