链家、CVTE笔试题
2017-09-03 13:37
232 查看
同一个老师,同一片代码。昨天,同学在做链家和CVTE的笔试题,我也拿来做了做(别问我为什么没有笔试通知,问了也不说),结果发现一个小伙伴和我做的代码的流程简直一模一样,甚至变量都定义的差不多,真的是同一个老师,同一片代码。。。
看题:
一、小明有N个食物,食物有各自的价值,小明想卖掉他们来换钱,时间越久,价值越高,第一天价值为1,第二天为2......,求最大价值?
例如:5 1 3 1 5 2 -> 43
int Much(vector<int> &ve,int num)
{
int left = 0;
int right = num-1;
int max = 0;
int i = 1;
while(left <= right)
{
if(ve[left] < ve[right])
max += ve[left++]*i;
else if(ve[left] > ve[right])
max += ve[right--]*i;
else
{
int left_tmp = left;
int right_tmp = right;
int tmp_i = 0;
while(left_tmp < right_tmp && ve[left_tmp] == ve[right_tmp])
{
if(tmp_i & 1)
left_tmp++;
else
right_tmp--;
}
if(left_tmp == right_tmp)
max += ve[right--] * i;
else
{
if(ve[left_tmp] < ve[right_tmp])
max += ve[left++] * i;
else
max += ve[right--] * i;
}
}
i++;
}
return max;
}
void main()
{
vector<int> ve;
int num;
cin>>num;
int tmp;
for(int i = 0; i < num; ++i)
{
cin>>tmp;
ve.push_back(tmp);
}
cout<<Much(ve,num)<<endl;
}
这道题很像贪心算法,不过昨天的通过率只有27%。后来想了想,改了一下,就是上边那样,但是没有那个编译器了,不知道现在通过率多少。
二、最大的连续子数组的长度
#include <iostream>
#include <vector>
using namespace std;
int getMaxSize(int *ar,int length)
{
if(ar == NULL || length <= 0)
return 0;
int max = 0;
int tmp1 = 0;
int tmp2 = 0;
for(int i = 0; i < length; ++i)
{
if(i == 0)
continue;
if(ar[i] - ar[i-1] == 1)
b80f
tmp1++;
else
tmp1 = 0;
if(ar[i] - ar[i-1] == -1)
tmp2++;
else
tmp2 = 0;
if(tmp1 > max)
max = tmp1;
if(tmp2 > max)
max = tmp2;
}
return max+1;
}
void main()
{
int ar[] = {1,2,3,4,7,6,5,4,3,2,1,7};
int len = sizeof(ar)/sizeof(ar[0]);
cout<<getMaxSize(ar,len)<<endl;
}
三、删除字符串中具体的字符
这道题我面58的时候,面试官让我写过,除了处理边界之外,没什么难度。
#include <iostream>
#include <string>
using namespace std;
char *getResult(char *src,int length,char c)
{
int num = 0;
for(int i = 0; i < length; ++i)
{
if(src[i] == c)
num++;
else
src[i-num] = src[i];
}
src[length-num] = 0;
return src;
}
int main()
{
char str[1000] = {0};
cin>>str;
char ch;
cin>>ch;
printf("%s\n",getResult(str,strlen(str),ch));
return 0;
}
四、逃亡问题,两个人要逃亡,只有一个包,现在给出物品的数量,体积,价值的数值,求最大的组合方式?
典型的0-1背包问题,很遗憾,昨天没写出来。。。现在也还不会,不过代码已经有了,先看看。
#include<iostream>
#include<cstring>
using namespace std;
class item
{
public:
int num;
int volume;
int value;
};
item record[2205][20];
int dp[1000];
int main()
{
int item_species,volume,i,j,k;
while(cin>>item_species>>volume)
{
memset(dp,0,sizeof(dp));
memset(record,0,sizeof(record));
item item1;
for(i=0;i<item_species;i++)
{
cin>>item1.num>>item1.volume>>item1.value;
item1.num-=1;
record[i][0].num=1, record[i][0].volume=item1.volume, record[i][0].value=item1.value;
for(j=1;item1.num>0;j++)
{
item1.num-=record[i][j-1].num*2;
if(item1.num<0)
{
int num=item1.num+record[i][j-1].num*2;
record[i][j].num=num;
record[i][j].volume=record[i][0].volume*num;
record[i][j].value=record[i][0].value*num;
}
else
{
record[i][j].num=record[i][j-1].num*2;
record[i][j].volume=record[i][j-1].volume*2;
record[i][j].value=record[i][j-1].value*2;
}
}
for(k=0;k<j;k++)
for(int x=volume;x-record[i][k].volume>=0;x--)
if(dp[x] < dp[x-record[i][k].volume]+record[i][k].value)
dp[x]=dp[x-record[i][k].volume]+record[i][k].value;
}
cout<<dp[volume]<<endl;
}
return 0;
}
看题:
一、小明有N个食物,食物有各自的价值,小明想卖掉他们来换钱,时间越久,价值越高,第一天价值为1,第二天为2......,求最大价值?
例如:5 1 3 1 5 2 -> 43
int Much(vector<int> &ve,int num)
{
int left = 0;
int right = num-1;
int max = 0;
int i = 1;
while(left <= right)
{
if(ve[left] < ve[right])
max += ve[left++]*i;
else if(ve[left] > ve[right])
max += ve[right--]*i;
else
{
int left_tmp = left;
int right_tmp = right;
int tmp_i = 0;
while(left_tmp < right_tmp && ve[left_tmp] == ve[right_tmp])
{
if(tmp_i & 1)
left_tmp++;
else
right_tmp--;
}
if(left_tmp == right_tmp)
max += ve[right--] * i;
else
{
if(ve[left_tmp] < ve[right_tmp])
max += ve[left++] * i;
else
max += ve[right--] * i;
}
}
i++;
}
return max;
}
void main()
{
vector<int> ve;
int num;
cin>>num;
int tmp;
for(int i = 0; i < num; ++i)
{
cin>>tmp;
ve.push_back(tmp);
}
cout<<Much(ve,num)<<endl;
}
这道题很像贪心算法,不过昨天的通过率只有27%。后来想了想,改了一下,就是上边那样,但是没有那个编译器了,不知道现在通过率多少。
二、最大的连续子数组的长度
#include <iostream>
#include <vector>
using namespace std;
int getMaxSize(int *ar,int length)
{
if(ar == NULL || length <= 0)
return 0;
int max = 0;
int tmp1 = 0;
int tmp2 = 0;
for(int i = 0; i < length; ++i)
{
if(i == 0)
continue;
if(ar[i] - ar[i-1] == 1)
b80f
tmp1++;
else
tmp1 = 0;
if(ar[i] - ar[i-1] == -1)
tmp2++;
else
tmp2 = 0;
if(tmp1 > max)
max = tmp1;
if(tmp2 > max)
max = tmp2;
}
return max+1;
}
void main()
{
int ar[] = {1,2,3,4,7,6,5,4,3,2,1,7};
int len = sizeof(ar)/sizeof(ar[0]);
cout<<getMaxSize(ar,len)<<endl;
}
三、删除字符串中具体的字符
这道题我面58的时候,面试官让我写过,除了处理边界之外,没什么难度。
#include <iostream>
#include <string>
using namespace std;
char *getResult(char *src,int length,char c)
{
int num = 0;
for(int i = 0; i < length; ++i)
{
if(src[i] == c)
num++;
else
src[i-num] = src[i];
}
src[length-num] = 0;
return src;
}
int main()
{
char str[1000] = {0};
cin>>str;
char ch;
cin>>ch;
printf("%s\n",getResult(str,strlen(str),ch));
return 0;
}
四、逃亡问题,两个人要逃亡,只有一个包,现在给出物品的数量,体积,价值的数值,求最大的组合方式?
典型的0-1背包问题,很遗憾,昨天没写出来。。。现在也还不会,不过代码已经有了,先看看。
#include<iostream>
#include<cstring>
using namespace std;
class item
{
public:
int num;
int volume;
int value;
};
item record[2205][20];
int dp[1000];
int main()
{
int item_species,volume,i,j,k;
while(cin>>item_species>>volume)
{
memset(dp,0,sizeof(dp));
memset(record,0,sizeof(record));
item item1;
for(i=0;i<item_species;i++)
{
cin>>item1.num>>item1.volume>>item1.value;
item1.num-=1;
record[i][0].num=1, record[i][0].volume=item1.volume, record[i][0].value=item1.value;
for(j=1;item1.num>0;j++)
{
item1.num-=record[i][j-1].num*2;
if(item1.num<0)
{
int num=item1.num+record[i][j-1].num*2;
record[i][j].num=num;
record[i][j].volume=record[i][0].volume*num;
record[i][j].value=record[i][0].value*num;
}
else
{
record[i][j].num=record[i][j-1].num*2;
record[i][j].volume=record[i][j-1].volume*2;
record[i][j].value=record[i][j-1].value*2;
}
}
for(k=0;k<j;k++)
for(int x=volume;x-record[i][k].volume>=0;x--)
if(dp[x] < dp[x-record[i][k].volume]+record[i][k].value)
dp[x]=dp[x-record[i][k].volume]+record[i][k].value;
}
cout<<dp[volume]<<endl;
}
return 0;
}
相关文章推荐
- cvte实习 网测+ 一面+笔试+技术面+boos面到拿到offer(技术类)
- 约瑟夫环(CVTE、网易2014.3.16笔试题offerP228)
- cvte-c++-笔试1
- CVTE 嵌入式软件工程师 笔试题
- cvte笔试有感
- CVTE前端开发在线笔试-2017.9.14
- 链家笔试算法题
- CVTE线上笔试总结
- cvte-c++-笔试2
- 2014CVTE招聘之笔试
- CVTE笔试题一:求数组中第n小的数
- 记录自已学习之CVTE笔试后感
- cvte笔试(web后台)
- 链家、美团点评测试岗位笔试总结
- CVTE2015校园招聘 Android 开发笔试
- CVTE笔试题二:判断两个字符串的拼接方式是否相同
- 剑指Offer——CVTE校招笔试题+知识点总结(Java岗)
- CVTE笔试面试之小感叹
- 链家笔试题
- 笔试题:cvte第一题二分法求字符串