目录
一.中兴笔试(2020.5.8)
加班员工编码
题目描述
玛莎想开-家新公司来推出自己的原创美容产品。为了使她的公司打响知名度她启动了一个计划,一开始她雇用了2名雇员。之后组织结构中的每名员工可再雇用最多2名员工,从而公司有了N名员工。每位新雇用的员工都会被分配-一个从2到N的唯一员工编号,玛莎的员工编号为1。两名被雇用的员工向雇用他她们的员工汇报。雇主员工分配任务给他她所雇用的员工。如果某位雇主员工只雇用了一名员工,那么这位被雇用的员工需要完成分配的所有任务,所以该员工通常需要加班。 玛莎想为所有加班的公司员工发放额外的奖金。编写一个算法, 帮助玛莎找到所有加班员工的员工编号。
a=[[1,2],[1,3],[2,4]],加班编号[4]
解题思路
1.统计雇主出现的频次
2.如果雇主出现频次为1,记录他的位置
3.根据只出现一次雇主的位置,直接把该雇主的员工记录下来
代码实现
def num(array):
#统计雇主出现的频次
dit={}
length=len(array)
for i in range(length):
if array[i][0] in dit:
dit[array[i][0]]+=1
else:
dit[array[i][0]]=1
#如果出现频次为1,记录它的位置
k=[]
for i in range (length):
if(dit[array[i][0]]==1):
k.append(i)
res=[]
#找出k位置所对应的员工编号
if len(k)==0:
res=[-1]
for i in k:
res.append(array[i][1])
res=sorted(res)
return res
a=[[1,2],[1,3],[2,4]]
result=num(a)
print(result)
输出结果:
二.vivo提前批(2020.6.8)
1.种树
题目描述
一个数列表示种植情况,1已种,0未种。相邻区域不能种,计算可新种植最大树数量。
输入描述
第一行一个数字,代表土地长度
第二行一个由0,1组成的数列,并以空格分割。表示目前种植情况。
输出描述
一个数字,表示在原先种植状态下,还可种植最大数量。
输入
- 5
- 1 0 0 0 0
输出
- 2
实现代码
n=int(input())
a=list(map(int,input.split()))
count=0
for i in range(n):
#头尾分开讨论
if i==0 and a[i]==0 and a[i+1]==0:
count+=1
a[i]=1
elif i==n-1 and a[i]==0 and a[i-1]==0:
count+=1
a[i] = 1
elif a[i]==0 and a[i-1]==0 and a[i+1]==0:
count+=1
a[i] = 1
else:
pass
print(count)
2.多组字符排序
题目描述
将多个子流水线编码合并
输入描述:
第一行n个子流水线
接下来n行,每行由一个空格分割一组数组,表示子流水线工序编码
输出描述:
合并后的用工序编码表示的完整流水线。各工序编码之间用空格分割。
输入:
- 3
- 1 2
- 3 4
- 5 6 7
输出:
- 1 2 3 4 5 6 7
实现代码
while True:
try:
N = int(input())
res=[]
for i in range(N):
ls=list(map(int,input().split()))
for j in ls:
res.append(j)
res=sorted(res)
#print(res)
res=[str(i) for i in res]
print(' '.join(res)) #join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串
except:
break
结果:注:join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串
c++
#include <iostream>
#include <stdio.h>
#include<string>
#include<algorithm>
#include <vector>
using namespace std;
//整型输入,字符型输出
int main(void){
int n;
vector<int> res;
cin>>n;
int x;
for(int i=0;i<n;i++){
while(cin>>x){
res.push_back(x);
char c=getchar();
if(c=='\n') break;
}
}
sort(res.begin(),res.end());
for(int i = 0; i < res.size(); i++){
if(i == 0) cout << to_string(res[i]);
else cout << " " << to_string(res[i]);
}
cout << endl;
}
结果:
注:
输入一行(可含空格):getline(cin,str);
字符串可直接加res1+=res[i];
三.华为(2020)
123变111222333
输入描述
输入升序或降序排列数字
输出描述
每个数字出现3次
代码实现
a=list(map(int,input().split()))
dic={}
for i in a:
if i in dic:
dic[i]+=1
else:
dic[i]=1
result=''
for k in dic.keys():#包含字典所有key的列表
result=result+str(k)*3
l=' '
print(l.join(result))
#for i in range(len(result)):
#l=l+result[i]+' '
print(l)
结果