华为2016实习机试题
2016-07-17 21:46
148 查看
在牛客网上做的。
老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.
输入描述:
输出描述:
输入例子:
输出例子:
这道题有两个陷阱,一是可以循环输入,二是测试用例中出现了A>B的情况,开始没注意,后来自己调试才发现。。上机没有调试怎么办啊。。
扑克牌游戏大家应该都比较熟悉了,一副牌由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)输入的顺子已经经过从小到大排序,因此不用再排序了.
输入描述:输入两手牌,两手牌之间用“-”连接,每手牌的每张牌以空格分隔,“-”两边没有空格,如4 4 4 4-joker JOKER。
输出描述:输出两手牌中较大的那手,不含连接符,扑克牌顺序不变,仍以空格隔开;如果不存在比较关系则输出ERROR。
代码如下:
老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.
输入描述:
输入包括多组测试数据。 每组输入第一行是两个正整数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
这道题有两个陷阱,一是可以循环输入,二是测试用例中出现了A>B的情况,开始没注意,后来自己调试才发现。。上机没有调试怎么办啊。。
#include <iostream> using namespace std; int main() { int n,m,i,j,num1,num2,tempscore,maxscore,start,end; char ch; while(cin>>n>>m) { int score[n+1]; score[0]=0; for(i=1;i<=n;i++) { cin>>tempscore; score[i]=tempscore; } for(i=0;i<m;i++) { cin>>ch>>num1>>num2; if(ch=='Q') { start=min(num1,num2); end=max(num1,num2); maxscore=score[start]; for(j=start+1;j<=end;j++) { if(score[j]>maxscore) maxscore=score[j]; } cout<<maxscore<<endl; } else if(ch=='U') { score[num1]=num2; } } }
扑克牌游戏大家应该都比较熟悉了,一副牌由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)输入的顺子已经经过从小到大排序,因此不用再排序了.
输入描述:输入两手牌,两手牌之间用“-”连接,每手牌的每张牌以空格分隔,“-”两边没有空格,如4 4 4 4-joker JOKER。
输出描述:输出两手牌中较大的那手,不含连接符,扑克牌顺序不变,仍以空格隔开;如果不存在比较关系则输出ERROR。
代码如下:
#include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; int main() { string a="345678910JQKA2"; vector<string> vect; vect.push_back("joker JOKER"); vect.push_back("JOKER joker"); string line; string str1,str2; int pos; while(getline(cin,line)) { pos=line.find('-'); str1=line.substr(0,pos); str2=line.substr(pos+1); int n1=count(str1.begin(),str1.end(),' '); int n2=count(str2.begin(),str2.end(),' '); if(str1==vect[0]||str1==vect[1]) cout<<str1<<endl; else if(str2==vect[0]||str2==vect[1]) cout<<str2<<endl; else if(n1==n2) { int l=a.find(str1[0]); int r=a.find(str2[0]); string ans=l>r?str1:str2; cout<<ans<<endl; } else if(n1==3&&n2!=3) cout<<str1<<endl; else if(n1!=3&&n2==3) cout<<str2<<endl; else cout<<"ERROR"<<endl; } }
相关文章推荐
- 监听器
- 算法:字符串旋转
- CTF牛刀小实——聪明的小羊
- 设计模式
- Other Linker Flags参数 -ObjC、-all_load和-force_load
- 【Hihocder 1329】——Splay
- hdu-2818-Building Block-带权并查集
- ARM地址映射
- spark-submit工具参数说明
- iOS运行时Runtime浅析
- 【SSH进阶】No result defined for action **的解决方案
- 如何快糙好猛地在Windows下编译CAFFE并使用其matlab和python接口
- 读书笔记-现代操作系统-7多媒体操作系统-7.6多媒体文件系统泛型7.7文件存放
- Java设计模式之Strategy模式
- Map集合HashMap TreeMap的输出方法
- PHPStorm IDE 快捷键(MAC)
- PHP基础知识构造函数与析构函数
- 文本编写Java
- 在ArcEngine中使用Geoprocessing工具-执行工具
- Android数据存储方式简括