版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/oqqENvY12/article/details/77604493
2018年滴滴校招笔试编程题
①用户任意输入一个整型数组,求连续子数组的最大和。
在C++中使用Vector类模板生成不定长数组是非常方便的,配合push_back使用
#include <vector>
#include <iostream>
#include "algorithm"
using namespace std;
int MaxSubSum(vector<int> arr, int len)
{
int i;
int MaxSum = 0;
int CurSum = 0;
for (i = 0; i<len; i++)
{
CurSum += arr[i];
if (CurSum > MaxSum)
MaxSum = CurSum;
//如果累加和出现小于0的情况,
//则和最大的子序列肯定不可能包含前面的元素,
//这时将累加和置0,从下个元素重新开始累加
if (CurSum < 0)
CurSum = 0;
}
return MaxSum;
}
int main()
{
int n,sum;
vector<int> a;
do
{
cin >> n; // 输入数组元素
a.push_back(n);
} while (getchar() != '\n');
int len = a.size(); // 求数组长度
sum = MaxSubSum(a, len); //求取最大子数组和
cout << sum << endl;
return 0;
}
运行结果
②用户任意输入一个整型数组,并输出第k大小的数值
排序算法很多种,这里只以冒泡排序为例
#include <vector>
#include <iostream>
using namespace std;
/*
* 冒泡排序
*/
vector<int> Sort(vector<int> a, int len)
{
int temp;
for (int i = 0; i < len - 1; i++) {
for(int j = i+1; j < len ; j++) {
if (a[i] >= a[j]) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
return a;
}
int main()
{
int n;
int k;
vector<int> a,a_sort;
do
{
cin >> n;
a.push_back(n);
} while (getchar() != '\n');
int len = a.size();
a_sort = Sort(a, len);
cout << "Plz enter the index:" << endl;
cin >> k;
cout << a_sort[k-1]<< endl;
return 0;
}
运行结果