中兴笔试题,供参考,大家一起努力
今天上午中兴的笔试题,听说是原题,之前没准备,真的很后悔,自己做的慌里慌张,不知道哪没注意越界还是超时了。
痛定思痛。自己下午又把上午的代码缕了一遍。自己试了一组数,是通过了,有不完善之处供大家讨论。
好多还是不懂,感觉是用最笨的方法在解决问题
#中兴##笔试题目##include <iostream>
#include <vector>
#include <time.h>
using namespace std;
int main()
{
clock_t start,finish;//测运行时间
start=clock();
int a[]={40,60,20,30,40,50,30,30};//测试用的数组
vector<int> salaries(a,a+8);
int num=salaries.size();
vector<int> res;
int i=0;
for(;i<num;i++)//完成工资的排序,冒泡
{
for(int j=0;j<num-i;j++)
{
if(salaries[j]<salaries[j+1])
{
int temp=salaries[j+1];
salaries[j+1]=salaries[j];
salaries[j]=temp;
}
}
}
//把工资装进桶中,array为工资数,freq为工资出现的频率,利用相同的数组下表对应
int *array=new int [10];
int *freq=new int [10];
array[0]=salaries[0];
freq[0]=0;
int number=0;
int n=0;
for(;n<num;n++)
{
if(salaries[n]==array[number]) freq[number]++;
else if(salaries[n]<=0) continue;
else if(salaries[n]!=array[number])
{
number++;
array[number]=salaries[n];
freq[number]=1;
}
}
//按工资出现的频次排序,冒泡
for(i=0;i<=number;i++)
{
for(int m=0;m<=number-i;m++)
{
if(freq[m]<freq[m+1])
{
int tempf=freq[m];
int tempa=array[m];
freq[m]=freq[m+1];
array[m]=array[m+1];
freq[m+1]=tempf;
array[m+1]=tempa;
}
}
}
//输出按频次排序后的数组
for(i=0;i<number;i++)
{
while(freq[i]>0)
{
res.push_back(array[i]);
cout<<array[i]<<" ";
freq[i]--;
}
}
//程序运行时间
finish=clock();
double duration=((double)(finish-start)/CLOCKS_PER_SEC)*1000;
cout<<duration<<"ms"<<endl;
return 0;
}