【WEB】网易2017年前端工程师实习生招聘笔试编程题总结

来源:互联网 发布:手机身份证ocr识别软件 编辑:程序博客网 时间:2024/05/06 03:16

1.消除重复元素

小易有一个长度为n序列,小易想移除掉里面的重复元素,但是小易想是对于每种元素保留最后出现的那个。小易遇到了困难,希望你来帮助他。

输入描述:

输入包括两行: 第一行为序列长度n(1 ≤ n ≤ 50) 第二行为n个数sequence[i](1 ≤ sequence[i] ≤
1000),以空格分隔

输出描述:
输出消除重复元素之后的序列,以空格分隔,行末无空格

输入例子: 9 100 100 100 99 99 99 100 100 100

输出例子: 99 100

分析

根据题意模拟一下就行

参考code

#include <bits/stdc++.h>using namespace std;int n;int a[105];map<int,int> m;vector<int> ret;int main(){    cin >> n;    for(int i = 0; i < n; i++) cin >> a[i];    for(int i = 0; i < n; i++) m[a[i]]++;    for(int i = 0; i < n; i++){        m[a[i]]--;        if(!m[a[i]])//遍历到最后一个数字            ret.push_back(a[i]);//尾部插入数字    }    int len = ret.size();    for(int i = 0; i < len; i++){        if(i == len - 1) printf("%d\n",ret[i]);        else printf("%d ",ret[i]);    }    return 0;}

2.集合

小易最近在数学课上学习到了集合的概念,集合有三个特征:1.确定性 2.互异性 3.无序性. 小易的老师给了小易这样一个集合: S = { p/q | w ≤ p ≤ x, y ≤ q ≤ z }
需要根据给定的w,x,y,z,求出集合中一共有多少个元素。小易才学习了集合还解决不了这个复杂的问题,需要你来帮助他。

输入描述:
输入包括一行: 一共4个整数分别是w(1 ≤ w ≤ x),x(1 ≤ x ≤ 100),y(1 ≤ y ≤ z),z(1 ≤
z ≤ 100).以空格分隔

输出描述: 输出集合中元素的个数

输入例子: 1 10 1 1

输出例子: 10

分析

枚举所有值组成的pair,约分之后丢进set去重即可。

参考code

#include <bits/stdc++.h>using namespace std;int w, x, y, z;set<pair<int, int> > S;int main(){    cin >> w >> x >> y >> z;    for(int i = w; i <= x; i++) {        for(int j = y; j <= z; j++) {            int ii = i, jj = j;            int di = __gcd(i, j);//求最大公约数            ii /= di; jj /= di;            S.insert(make_pair(ii, jj));        }    }    cout << S.size() << endl;    return 0;}

3.奇怪的表达式求值

常规的表达式求值,我们都会根据计算的优先级来计算。比如/的优先级就高于+-。但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没有除法,意味着表达式中没有/,只有(+, - 和 )。现在给出一个表达式,需要你帮忙计算出小易所在的世界这个表达式的值为多少 ?

输入描述: 输入为一行字符串,即一个表达式。其中运算符只有-,+,*。参与计算的数字只有0~9. 保证表达式都是合法的,排列规则如样例所示。

输出描述: 输出一个数,即表达式的值

输入例子: 3+5*7

输出例子: 56

奇怪的表达式求值

分析

直接模拟过去就完了。

参考code

#include <bits/stdc++.h>using namespace std;string s;int main(){    cin >> s;    int ans = s[0] - '0';    for(int i = 1; i < (int)(s.size() - 1); i+=2){        if(s[i] == '*')            ans = ans * (s[i + 1] - '0');        else if(s[i] == '+')            ans = ans + (s[i + 1] - '0');        else {            ans = ans - (s[i + 1] - '0');        }    }    cout << ans << endl;}

参考网址:
https://www.nowcoder.com/question/next?pid=4575457&qid=83063&tid=7717253
http://m.nowcoder.com/discuss/22696?type=0&order=0&pos=5&page=1&from=singlemessage&isappinstalled=0

1 0
原创粉丝点击