华为2016校园招聘上机笔试题
2016-03-17 09:33
405 查看
老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.
输入描述:
输入包括多组测试数据。
每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。
学生ID编号从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩
接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为'Q'的时候, 表示这是一条询问操作,他询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少
当C为‘U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。
输出描述:
对于每一次询问操作,在一行里面输出最高成绩.
输入例子:
5 7
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 4 5
U 2 9
Q 1 5
输出例子:
5
6
5
9
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
处理:
1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)
2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并)
3.输入的文件可能带路径,记录文件名称不能带路径
扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):)
3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER
输入两手牌,两手牌之间用“-”连接,每手牌的每张牌以空格分隔,“-”两边没有空格,如:4 4 4 4-joker JOKER
请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR
基本规则:
(1)输入每手牌可能是个子,对子,顺子(连续5张),三个,炸弹(四个)和对王中的一种,不存在其他情况,由输入保证两手牌都是合法的,顺子已经从小到大排列;
(2)除了炸弹和对王可以和所有牌比较之外,其他类型的牌只能跟相同类型的存在比较关系(如,对子跟对子比较,三个跟三个比较),不考虑拆牌情况(如:将对子拆分成个子)
(3)大小规则跟大家平时了解的常见规则相同,个子,对子,三个比较牌面大小;顺子比较最小牌大小;炸弹大于前面所有的牌,炸弹之间比较牌面大小;对王是最大的牌;
(4)输入的两手牌不会出现相等的情况。
答案提示:
(1)除了炸弹和对王之外,其他必须同类型比较。
(2)输入已经保证合法性,不用检查输入是否是合法的牌。
(3)输入的顺子已经经过从小到大排序,因此不用再排序了.
输入描述:
输入包括多组测试数据。
每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。
学生ID编号从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩
接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为'Q'的时候, 表示这是一条询问操作,他询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少
当C为‘U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。
输出描述:
对于每一次询问操作,在一行里面输出最高成绩.
输入例子:
5 7
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 4 5
U 2 9
Q 1 5
输出例子:
5
6
5
9
#include <iostream> using namespace std; int tmax(int *a, int x, int y) { if(x>y) { int t=x; x = y; y = t; } int i,m = a[x]; for(i=x+1; i<=y; ++i) { if(a[i] > m) m = a[i]; } return m; } int main() { int n,m,i,x,y; int a[30001]; char c; while(cin>>n>>m) { for(i=1; i<=n; ++i) { cin>>a[i]; } for(i=0; i<m; ++i) { cin>>c>>x>>y; if(c == 'Q') { cout<<tmax(a, x, y)<<endl; } else if(c == 'U') { a[x] = y; } } } return 0; }
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
处理:
1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)
2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并)
3.输入的文件可能带路径,记录文件名称不能带路径
#include <iostream> #include <string> #include <unordered_map> #include <set> #include <vector> #include <algorithm> using namespace std; struct info { int rak; int cnt; info(int r, int c) { rak = r; cnt = c; } bool operator < (const info &a) const { if(cnt == a.cnt) return rak < a.rak; return cnt > a.cnt; } }; bool cmp(const pair<string, info> &a, const pair<string, info> &b) { return a.second < b.second; } int main() { string str,s; unordered_map<string,info> record; unordered_map<string,info>::iterator itfind; vector<pair<string,info> > v; vector<pair<string,info> >::iterator itv; int i = 0,pos; while(getline(cin, str)) { ++i; if(str.length() == 0) break; pos = str.rfind("\\"); s = str.substr(pos+1); itfind = record.find(s); if(itfind == record.end()) { info tmp(i, 1); record.insert(pair<string, info>(s, tmp)); } else { info tmp(itfind->second.rak, itfind->second.cnt+1); record.erase(s); record.insert(pair<string, info>(s, tmp)); } } for(itfind = record.begin(); itfind != record.end(); ++itfind) { v.push_back(make_pair(itfind->first, itfind->second)); } sort(v.begin(), v.end(), cmp); int j = 0; for(itv=v.begin(); itv!=v.end()&&j<8; j++,++itv) { s = (*itv).first; if(s.find(" ") <=16 ) cout<<s<<" "<<(*itv).second.cnt<<endl; else { cout<<s.substr(s.find(" ")-16)<<" "<<(*itv).second.cnt<<endl; } } return 0; }
扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):)
3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER
输入两手牌,两手牌之间用“-”连接,每手牌的每张牌以空格分隔,“-”两边没有空格,如:4 4 4 4-joker JOKER
请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR
基本规则:
(1)输入每手牌可能是个子,对子,顺子(连续5张),三个,炸弹(四个)和对王中的一种,不存在其他情况,由输入保证两手牌都是合法的,顺子已经从小到大排列;
(2)除了炸弹和对王可以和所有牌比较之外,其他类型的牌只能跟相同类型的存在比较关系(如,对子跟对子比较,三个跟三个比较),不考虑拆牌情况(如:将对子拆分成个子)
(3)大小规则跟大家平时了解的常见规则相同,个子,对子,三个比较牌面大小;顺子比较最小牌大小;炸弹大于前面所有的牌,炸弹之间比较牌面大小;对王是最大的牌;
(4)输入的两手牌不会出现相等的情况。
答案提示:
(1)除了炸弹和对王之外,其他必须同类型比较。
(2)输入已经保证合法性,不用检查输入是否是合法的牌。
(3)输入的顺子已经经过从小到大排序,因此不用再排序了.
#include <iostream> #include <string> #include <algorithm> using namespace std; string POKER = "345678910JQKA2jokerJOKER"; bool ccmp(char a, char b) { int i1 = POKER.find(a); int i2 = POKER.find(b); return i1 < i2; } int Cntblank(const string &s) { int len = s.length(), i; int cnt = 0; for(i=0; i<len; ++i) { if(s[i] == ' ') cnt++; } return cnt+1; } int cmp(const string &s1, const string &s2) { int cnt1 = Cntblank(s1); int cnt2 = Cntblank(s2); int i1 = POKER.find(s1[0]); int i2 = POKER.find(s2[0]); if(s1[0] == 'J' && s1.length()>1 && s1[1] == 'O') i1 = POKER.find("JO"); if(s2[0] == 'J' && s2.length()>1 && s2[1] == 'O') i2 = POKER.find("JO"); if(cnt1 == 2 && (s1[1] == 'o' || s1[1] == 'O')) return 1; else if(cnt2 == 2 && (s2[1] == 'o' || s2[1] == 'O')) return 0; else if(cnt1==4 && cnt2==4) { if(i1>i2) return 1; return 0; } else if(cnt1==4) return 1; else if(cnt2==4) return 0; else if(cnt1 != cnt2) { return -2; } else return i1>i2; } int main() { string str,s1,s2; int index; while(getline(cin, str)) { index = str.find('-'); s1 = str.substr(0, index); s2 = str.substr(index+1); index = cmp(s1, s2); if(index == -2) cout<<"ERROR"<<endl; else if(index == 0) cout<<s2<<endl; else cout<<s1<<endl; } return 0; }
相关文章推荐
- 机器学习样本特征之间的相似性度量总结
- Opentsdb 开发和使用笔记
- php中web上传文件的原理及如何限制上传文件的大小及格式
- Css3 兼容新旧浏览器
- android stuido 快捷键
- Powershell 批量导入AD账户
- NSDate格式化日期
- Android Wi-Fi子系统学习笔记
- CUDA,day-2,共享内存-排序算法
- CUDA,day-2,合并列表
- HDU1686:Oulipo
- android开发学习3
- iOS中UIScrollerView的用法及基于AotoLayout的控件悬停
- 大数据应用开发八大基本原则
- CUDA,day-2,二维数组操作
- 递推_斐波拉契数列
- xml和json数据的比较
- iOS蓝牙开发
- CUDA,day-1,一维数组
- 乱码