iOS笔试四道编程题,全A了,比较简单。
代码在下面,抛砖引玉。
1、石头剪刀布问题。 我也不知道代码如何写的优雅,稍微优化了下,不然判断太多了。
#include<iostream> #include<vector> #include<map> using namespace std; int main() { int n;cin>>n; char a,b,c,d; int q,w,e,r; map<char,int> mp; mp['S']=3;mp['J']=2;mp['B']=1; float x,y; while(n) { cin>>a>>b>>c>>d; q=mp[a],w=mp[b],e=mp[c],r=mp[d]; x=0,y=0; if(q==1){ if(e==3) x++; if(r==3) x++; } else{ if(q-e==1) x++; if(q-r==1) x++; } if(w==1){ if(e==3) y++; if(r==3) y++; } else{ if(w-e==1) y++; if(w-r==1) y++; } if(x>y) cout<<"left"<<endl; else if(x==y) cout<<"same"<<endl; else cout<<"right"<<endl; n--; } system("pause"); return 0; }2、构建字符串的次数。遵循以下规则
1) 添加一个字符(好像只能时尾部添加,代码只考虑这个,应该是这样的)
2)复制前面已有的,只能用规则2一次。
#include<iostream> #include<string> #include<vector> using namespace std; int main() { int n;cin>>n; string s;cin>>s; vector<int> v; for(int i=1;i<s.size()/2+1;i++) { if(s[i]==s[0]) v.push_back(i); } for(int i=v.size()-1;i>=0;i--) { int a=0,b=v[i],k=v[i]; while(s[a]==s[b]&&b<s.size()) { a++;b++; } if(a==k) { cout<<n-k+1<<endl; system("pause"); return 0; } } cout<<n<<endl; system("pause"); return 0; }3、结构体排序,比较简单。
#include<iostream> #include<vector> #include<algorithm> using namespace std; struct node{ string s; int x; int y; }; int main() { int n,k;cin>>n; while(n){ n--; cin>>k; vector<node> v; for(int i=0;i<k;i++) { node a; cin>>a.s>>a.x>>a.y; v.push_back(a); } sort(v.begin(),v.end(),[](node &a,node &b) { if(a.x>=b.x) { if(a.x>b.x) return true; if(a.y>=b.y){ if(a.y>b.y) return true; if(a.s<b.s) return true; else return false; } else return false; } return false; }); for(int i=0;i<k;i++) cout<<v[i].s<<" "; cout<<endl; } system("pause"); return 0; }4、字符串匹配。用例真的是太简单了,差不多暴力过的。
#include<iostream> #include<string> using namespace std; int main() { int n;cin>>n; string s,t;string x; while(n--) { cin>>s; cin>>t; x=""; for(int i=0;i<s.size();i++) { if(s[i]=='1') x+="63231323"; if(s[i]=='2') x+="53231323"; if(s[i]=='3') x+="43231323"; } int res=0;int xs=x.size(); for(int i=0;i<t.size()-x.size()+1;i++) { int k=i,j,next=0;int flag=0; if(t[i]==x[0]) { for(j=i+1;j<i+x.size()&&j<t.size();j++) { if(t[j]!=x[j-k]) { break; } if(flag==0&&t[j]==x[0]) { next=j; flag=1; } } if(j==i+x.size()) { res++; if(flag==1) i=next-1; else i=j-1; } } } cout<<res<<endl; } system("pause"); return 0; }
全部评论
(0) 回帖