今晚参加了蘑菇街的在线笔试题,我学的c++,没学java和python,选择题java和python挺多的基本不会。
笔试题有两道,第一道对了90%,仔细想了想应该是输入数字的上限没有控制,逻辑应该没有问题了。说白了冒泡排序。只需要计算需要交换多少次数字让数字序列变为有序。
例如:
输入 输出
2 -----》表示两串数字序列
3 -----》第一个数字序列有3个数,分别如下:
1 2 3
4 ------》第二个数字序列有4个数....
4 3 2 1
我的原代码如下:
#include <iostream>
using namespace std;
int timesOfSwap(int *arr, int len)
{
if (arr == NULL || len < 1)
{
return -1;
}
int sum = 0;
for (int i = 0; i < len-1; ++i)
{
for (int j = 0 ; j < len - i -1 ; ++j)
{
if (arr[j] > arr[j + 1])
{
swap(arr[j], arr[j + 1]);
sum++;
}
}
}
return sum;
}
int main()
{
int t = 0; //times
int n = 0; //number
cin >> t;
//问题是没有考虑上边界
if (t < 1)
{
return 1;
}
int *lenofarray = new int[t];
int **array = new int*[t];
for (int i = 0; i < t; ++i)
{
cin >> n;
if (n < 1)
{
return 1;
}
array[i] = new int[n];
lenofarray[i] = n;
for (int j = 0; j < n; ++j)
{
cin >> array[i][j];
}
}
for (int k = 0; k < t; ++k)
{
cout << timesOfSwap(array[k], lenofarray[k]) << endl;
}
return 0;
}
第二道题当时没有写出来,原问题大概如下:
有n桶油漆,用这n桶油漆输出最大的数字,刷数字1~9所需的油漆数字接着n后输入
输入:
n
543212345
输出:
55555
我没有写出来,当时就是找需要最少的油漆的数字,然后统计刷这个数字的个数,我觉得能刷出最长的数字就是题目所求的,但是没有考虑完全。