链家、CVTE笔试题
来源:互联网 发布:php namespace use 编辑:程序博客网 时间:2024/04/30 12:43
同一个老师,同一片代码。昨天,同学在做链家和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)
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笔试题
- CVTE笔试题
- CVTE笔试题
- CVTE笔试题
- CVTE水果笔试题
- CVTE笔试题
- cvte笔试题
- cvte笔试题
- CVTE 嵌入式软件工程师 笔试题
- 2016 CVTE 笔试编程题
- 【CVTE笔试题】数字分割
- C++笔试题(二).CVTE
- CVTE笔试
- CVTE笔试题---字符串的全排列
- 2016CVTE春招笔试编程题
- CVTE 2018 Android在线笔试编程题
- 2016CVTE校招在线笔试题
- 广州CVTE公司笔试程序题
- 51nod 1086 背包问题V2 (巧妙dp,二进制)
- 538. Convert BST to Greater Tree
- 卡尔曼滤波
- Java---学习(7)
- python中hashlib模块
- 链家、CVTE笔试题
- 简单的分布式进程
- POJ 3764:01字典树
- linux文件系统及bash基础特性
- 最长不下降子序列
- 2017. 9.3
- Android源码怎么编译adb?
- React 组件化
- 《Java并发编程的艺术》笔记五——Java线程基础.md