笔试编程真题汇总(1)

目录

一.中兴笔试(2020.5.8)

加班员工编码

二.vivo提前批(2020.6.8)

1.种树

2.多组字符排序

三.华为

123变111222333


一.中兴笔试(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)

结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值