华为笔试4.1场

问题1:
给个字符串,一个逻辑运算式子,有AND OR NOT逻辑运算,无括号。
比如a AND b OR c AND NOT d,问一个逻辑运算式子是否合法。
思路:字符串处理题,把AND和OR周围的字符串提出,分别判断他们是不是一个合法的逻辑表达式子(NOT x或者x)。
细节比较多,会io流操作的话用io流会好写一些,我不会,就只能打状态做了。

AC代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e2 + 7;
char s[N];
int main() {
	while(gets(s)) {
		int isand = 1, isnot = 0, n = strlen(s), is1 = 1;
		/* isand表示当前位置能不能摆and和or 
		 * isnot表示当前位置能不能摆not
		 * 0表示可以,1表示不行
		 * is1表示目前是否存在中途就能判断不合法的情况
		*/ 
		string temp;
		for(int i = 0; i <= n; i++) {
			if(s[i] != ' ' && s[i] != '\0')temp += s[i];
			else {
				if(temp == "NOT") {
					if(isnot) {
						is1 = 0;
						puts("0");
						break;
					}
					else isnot = 1;
				}
				else if(temp == "AND" || temp =="OR") {
					if(isand) {
						is1 = 0;
						puts("0");
						break;
					}
					else isnot = 0, isand = 1;
				}
				else {
					int legal = 1;
					for(auto c : temp) {
						if('a' <= c && c <= 'z');
						else legal = 0;
					}
					if(!legal || !isand) {
						is1 = 0;
						puts("0");
						break;
					}
					else isand = 0, isnot = 1;
				}
				temp = "";
			}
		}
		if(is1) {
			if(!isand && isnot)puts("1");
			else puts("0");
		}
	}
	return 0;
}



问题2:给定n个工号,问每个工号出现了几次,按照工号字典序输出。
思路:map+iterator就好了,考你会不会stl,如果不会可以手写AVL,我也不知道暴力能不能过。

AC代码:

#include<bits/stdc++.h>
using namespace std;

int main() {
	map<string, int> M;
	map<string, int>::iterator it;
	int n; cin >> n;
	for(int i = 0; i < n; i++) {
		string s;
		cin >> s;
		M[s]++;
	}
	for(it = M.begin(); it != M.end(); it++)
		cout << it -> first << " " << it -> second << endl;
	return 0;
}


问题3:给出若干个头文件的依赖,问某个头文件自己是否会间接的依赖自己,也就是循环依赖,如果会,输出所有的循环依赖可能(应该是这个意思吧)
思路:先把输入的东西处理一下,把头文件视作点,依赖关系视作边,跑dfs,找出这个点所在的所有环输出。
感觉没写错,不知道为什么最后20%死活过不去,如果有AC的大佬麻烦留个言教教我。

80%通过代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 7;
char s[N];

vector<int> G[N], sta;
map<string, int> M;
vector<string> rM, msb;

int pool = 0;
int insta[N] = {0};

void addEdge(string s, string t) {
	if(!M[s])M[s] = ++pool, rM.push_back(s);
	if(!M[t])M[t] = ++pool, rM.push_back(t);
	G[M[s]].push_back(M[t]);
}
void dfs(int x, int rt) {
	sta.push_back(x);
	insta[x] = 1;
	for(auto v:G[x]) {
		if(insta[v] && v == rt) {
			string msg;
			for(int i = 0; i < sta.size(); i++) {
				msg += rM[sta[i] - 1];
				if(i + 1 < sta.size())msg += ' ';
			}
			msb.push_back(msg);
		}
		else if(!insta[v])dfs(v, rt);
	}
	insta[x] = 0;
	sta.pop_back();
}
void query(string s) {
	msb.clear();
	dfs(M[s], M[s]);
	assert(sta.empty());
	if(msb.empty())cout << "none loop include " << s << endl;
	else {
		cout << "Bad coding -- loop include as bellow:" << endl;
		for(int i = 0; i < msb.size(); i++)cout << msb[i] << endl;
	}
}
int main() {
	while(gets(s)) {
		string temp, start;
		int n = strlen(s), st = -1;
		for(int i = 0; i <= n; i++) {
			if(s[i] == ':') {
				if(st == -1) {
					st = 0;
					start = temp;
				}
				temp = "";
			}
			else if(s[i] == ' ') {
				if(st == -1)st = 1;
				if(st == 0)addEdge(start, temp);
				temp = "";
			}
			else if(s[i] == '\0') {
				if(st == 0)addEdge(start, temp);
				else if(st == 1)query(temp);
				temp = "";
			}
			else temp += s[i];
		}
	}
	return 0;
}


#华为笔试##华为##笔试题目#
全部评论
我觉得第三题剩下20%可能是因为超时没有通过吧
点赞 回复 分享
发布于 2020-04-12 10:42
lz是在官网上投递的实习岗位吗?
点赞 回复 分享
发布于 2020-04-04 13:58
请问使用的编程语言有要求吗?
点赞 回复 分享
发布于 2020-04-03 00:44
厉害
点赞 回复 分享
发布于 2020-04-02 23:45
楼主百分之八十比我百分之七十强太多了,羡慕
点赞 回复 分享
发布于 2020-04-02 20:02
请问在线oj可以用#include<bits/stdc++.h>头文件吗
点赞 回复 分享
发布于 2020-04-02 14:55
实习笔试吗
点赞 回复 分享
发布于 2020-04-01 21:14

相关推荐

emmm别问我为啥上一条帖子隔了两个月我才开始投简历和拿offer,因为我懒😰简单流程如下:周一凌晨改好的简历,然后到处乱投简历;周二接到了三维家的一面通知,临时抱佛脚的背了一些八股;周三上午一面下午通知第二天hr面;周四上午hr面下午拿offer,遂收手支线:在BOSS上顺手投了几个大厂,投字节的时候不小心投城客户端了,结果过了一天HR突然把我简历要走了,还问我能不能整客户端,我直接一口答应(脏面评警告😢)结果在周三下午的时候给我打电话,说前端有空缺实习岗,问我有没有兴趣,然后就跟我约了周四下午一面😰我都没咋准备啊,咩都不会啊😭结果周四下午面完,晚上打电话通知过一面了,赶紧把二面约在下周一下午,留点缓冲时间。逆大天了,我一半的问题都不会,他居然给我过了?运气未免有点好了😥现在正在恶补计网、网安、性能优化的东西(这三大板块我是几乎一点不会,一面几乎一点答不出来,加上我又没怎么背八股,这块被干烂了😵)心得体会与经验:1.&nbsp;我giao怎么这么快就结束了,我还以为要找好久😨2.&nbsp;大厂的面试问题真的和中厂小厂很大不同,比如在三维家我能自己吹水到vue的数据劫持、Proxy代理响应式之类的他们就觉得很不错了,但是在字节你但凡敢提到一下就会追问你细节了,一追问马脚就全漏出来了3.&nbsp;有信心真的很重要,我感觉我能拿中厂offer最重要的就是吹水吹出自信来了,以至于三维家面试反问面试官有哪里还需要改进的时候,他就说很不错了解的很多😦4.&nbsp;理解很重要,我从头到尾真没背过很多八股,不过有一些知识确实是敲过代码验证过,所以面试的时候能吹水吹得出来😇想了解面经啥的可以直接评论区问我,但我可能也说不全,因为我没有记录,而且今天摆了一天感觉记忆快清空了😵下面是故事时间:我暑假刚开始的时候才开始准备八股,印象很深那个时候连什么原型、事件循环、闭包这些名词都没听过,资料也不知道怎么找,就一直零零散散的准备,感觉也只有js稍微背了一下八股,其他很多时候都是靠完全理解和手写熟悉一些机制的,但这样做效率很低,反正准备了一个多星期半个月就开摆了😭结果一摆就摆到了开学,笔记是乱七八糟的,八股是忘光光的,简历是一直没改的,实习也是一直没投过的。直到上周日晚上偶然和师兄聊天,他突然问我“你怎么还不找实习”,那天晚上才幡然醒悟,是时候做点事情了😡然后就按照上面描述的来走了。其实我感觉我从头到尾都没背特别多八股,也没怎么找刷题资料啥的,早期就是翻尚硅谷或者黑马的入门视频从头学起,中期用面试鸭看了一点点题,主要是在学js机制和敲js代码,后期才发现了w3c的面经网站,然后在那里看着学(那个时候已经懒得敲了,因为有些问题与代码感觉不像是给找实习的看的,忒细了点😂)接下来继续准备字节二面吧,虽然几乎没啥可能可以通过,但是万一有奇迹呢?😍😍😍也祝大家能够早日拿到心仪的offer
我的offer呢😡:我已经预见10天后你会发,节孝子启动了
投递三维家等公司10个岗位
点赞 评论 收藏
分享
被子有点短:有了实习后会发现有实习也没用
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
评论
4
47
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务