一、2016华为校园招聘上机笔试题
第一题 :最高分是多少
解法1:暴力模拟
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
while(cin>>n>>m){
vector<int> data(n+1,0);
for(int i=1;i<=n; ++i){ // 为什么不能是 i [0,n-1],因为题目中:学生ID编号从1编到N
cin>>data[i];
}
char c;
int a,b;
for(int j=0;j<m;++j){
cin>>c>>a>>b;
if(c=='U'){
data[a]=b;
}else if(c=='Q'){
if(a>b) swap(a,b);
int ans=data[a];
for(int i=a+1;i<=b;i++){
ans=max(ans,data[i]);
}
cout<<ans<<endl;
}
}
}
return 0;
}
第三题:扑克牌大小
解法1:模拟
//“输入每手牌可能是个子,对子,顺子(连续5张),三个,炸弹(四个)和对王中的一种,
//不存在其他情况,由输入保证两手牌都是合法的,顺子已经从小到大排列“
//这句规则让牌面类型的确定和大小的比较直接可以转换为牌个数的比较了,这是解决测试问题的捷径!
//所以一定要善于利用题目已知条件!!!
#include<bits/stdc++.h>
using namespace std;
int main(){
string line;
while(getline(cin,line)){
if(line.find("joker JOKER")!=-1)
cout<<"joker JOKER"<<endl;
else{
int deli=line.find('-');
string s1=line.substr(0,deli);
string s2=line.substr(deli+1);
// count用于统计字符串中空格的个数
int c1=count(s1.begin(),s1.end(),' ');
int c2=count(s2.begin(),s2.end(),' ');
string first1=s1.substr(0,s1.find(' '));
string first2=s2.substr(0,s2.find(' '));
string str="345678910JQKA2jokerJOKER";
if(c1==c2){
if(str.find(first1)>str.find(first2))
cout<<s1<<endl;
else
cout<<s2<<endl;
}else
if(c1==3)
cout<<s1<<endl;
else if(c2==3)
cout<<s2<<endl;
else
cout<<"ERROR"<<endl;
}
}
}