✅作者简介:一名即将大三的计科专业学生,为C++,Java奋斗中
✨个人主页:叶落秋白的主页
?系列专栏:牛客刷题专栏
?推荐一款模拟面试、刷题神器?注册即可免费刷题
?前言
一次偶然的机会我登上了牛客网的页面,在我练习c和c++的题时,我发现了这个网站的很多优点,让我很是舒心,例如:
1、干净整洁且具有强提示的代码高亮
2、练习题内容紧凑,很适合系统的复习、巩固
3、调试、运行代码方便
4、模拟大厂的面试题很丰富
因此很推荐大家来这儿坚持日常刷题,哪怕每天只刷一道题也会丰富自己的知识,让自己任何时候都不会出现不认识代码的情况。下面我分享一些我个人在牛客网刷到并解决的题,浅浅的解析,欢迎大家交流指正!
?目录
C语言经典基础题
牛牛的新数组求和
牛牛的排序
C++经典例题
选择排序
数组元素反转
函数计算阶乘
?结语
C语言经典基础题
牛牛的新数组求和
题目:
我的答案:
#include <iostream>using namespace std;void Init_Array(int *array,int n){ int value=0; for(int i=0;i<n;i++){ cin>>value; array[i]=value; }}int cal(int *array,int n){ int sum=0; for(int i=0;i<n;i++){ sum+=array[i]; } return sum;}int main() { int n=0; cin>>n;//输入数组个数 int *array=new int[n]; Init_Array(array,n);//初始化数组 cout<<cal(array,n); delete []array;}
题解:
其实这题很基础,考查的就是数组求和的知识,我这样写反而会复杂一点,牺牲了空间但是换取了时间的效率。首先将数组开辟在堆区,这样就能动态确定数组的容量,然后写一个函数进行数组元素的赋值,最后调用求和函数返回最终结果并输出即可。
牛牛的排序
题目:
我的答案:
#include <iostream>using namespace std;void sort(int *array,int n){ for(int i=0;i<n;i++){ for(int j=0;j<n-i-1;j++){ if(array[j]>array[j+1]){ int t=array[j]; array[j]=array[j+1]; array[j+1]=t; } } } for(int i=0;i<n;i++){ cout<<array[i]<<" "; }}int main() { int n=0,v=0; cin>>n; int arr[n]; for(int i=0;i<n;i++){ cin>>v; arr[i]=v; } sort(arr, n);}
题解:
这题就是非常经典的数组排序问题了,写一个函数包含冒泡排序就可以,如果冒泡排序或者选择排序不太熟练的朋友可以再去回顾回顾知识。
C++经典例题
选择排序
我的答案:
#include <iostream>using namespace std;int main() { int arr[6] = { 0 }; int len = sizeof(arr) / sizeof(int); for (int i = 0; i < len; i++) { cin >> arr[i]; } // write your code here...... for(int i=0;i<len-1;i++) { for(int j=i+1;j<len;j++) { if(arr[i]>arr[j]) { int t=arr[i]; arr[i]=arr[j]; arr[j]=t; } } } for(int i=0;i<len;i++){ cout<<arr[i]<<" "; } return 0;}
题解:
毫无疑问,选择排序和冒泡排序是算法的基础知识,这两个在一起比较的话要注意他们遍历的范围,注意不要让数组越界。
数组元素反转
题目:
这里牛客网已经给出了输出的格式:
顺着代码往后写:
//指向首尾的双指针 int left = 0; int right = len-1; while(left<right) { //对首尾的指针进行移动 int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left++; right--; }
题解:
这是一个简单双指针的实际运用,将数组两边数组反转,只需要在低边界小于高边界的时候两头反转之后将指针修改即可。
函数计算阶乘
题目:
我的答案:
#include <iostream>using namespace std;long long factorial(int n);int main() { int n; cin >> n; cout << factorial(n) << endl; return 0;}long long factorial(int n) { // write your code here...... if(n==0){ return 1; } else if(n>0){ return n*factorial(n-1); }else{ return -1; }}
题解:
经典阶乘问题,这里利用递归来解决最为舒心了。我们知道0的阶乘是1,小于0不存在阶乘,直接返回-1。而且我们只知道n为0时结果为一,那么就可以来一个套娃的操作,当n大于1时,返回n乘以该函数,参数列表传入n-1,这样直到n-1等于0时,程序开始计算n的阶乘,就能得到最终结果。
图解:
?结语
如果感到无聊,何不打开牛客网刷刷题解解闷呢,这里开个小玩笑。讲真的,如果时间足够,我们一起刷题交流进步,愿你我未来在顶峰相见!!!