校招笔试题-玩转南美馆
2016-09-22 20:57
288 查看
校招笔试题-玩转世博南美馆
原题描述:
世博会期间,小明计划玩遍所有南美国家馆,南美共有10个国家,按顺序编号分别为0-9.小明的游玩方案是这样的:
若玩的人太多,就把馆分成两批,分的方式是在相邻的某两馆之间插一个牌子:任选其中一批先玩,另一批后玩;
若一批馆还是玩不玩,则继续分为两批,且一批中的馆全部玩完之后才能玩下一批馆;
每批馆玩的时候,只能从这批当中编号最小的馆开始,按照相邻的编号逐个玩,一天至少可以玩一个馆。
十个馆玩遍之后,小明拿出在是个馆盖章的册子,请你根据册子上盖章的顺序,判断小明是否遵循了自己的游玩方案。
输入:0-9十个数字的排列;
输出:符合规则的,输出Yes,不符合规则的,输出No;
样例输入输出:
输入 | 输出 |
---|---|
3287956401 | yes |
4130279856 | no |
思路:
就是找出最小的那个,然后把最小的左边的赋值到一个新数组里,右边的也赋值到一个新数组里。然后左边的那个数组要么全大于右边的数组,要么全小于。不可能有其他情况,就这样递归判断下面是代码实现,自己写的,还望指正
C++代码:#include <iostream> #include <sstream> #include <string> #include <vector> using namespace std; bool check(vector<int>& vec_int); int depart(vector<int>& vec); int judge(vector<int>& left,vector<int>& right); int main() { int result=0; vector<int> vec_int; string inputstr;//="3287956401"; cin>>inputstr; int strlen=inputstr.length(); stringstream ss; for(int i=0;i<strlen;i++) { int tmp; ss<<inputstr[i]; ss>>tmp; ss.clear(); vec_int.push_back(tmp); } result=check(vec_int); if(result) cout<<"yes"<<endl; else cout<<"no"<<endl; //下面两行是阻止命令窗口闪退 // int a; // cin>>a; return 0; } bool check(vector<int>& vec_int) { if(vec_int.size()==1) return true; int minpos=depart(vec_int); vector<int>::iterator iter=vec_int.begin()+minpos; vector<int> vec_left; vector<int> vec_right; if(minpos==0) vec_left.push_back(vec_int[0]); else vec_left.insert(vec_left.end(),vec_int.begin(),iter); if((minpos+1)==vec_int.size()) vec_right.push_back(vec_int[minpos]); else vec_right.insert(vec_right.end(),iter+1,vec_int.end()); if(judge(vec_left,vec_right)) { if(!check(vec_left)) return false; if(!check(vec_right)) return false; } else return false; return true; } int depart(vector<int>& vec) { int min=vec[0],pos=0; for(int j=0;j<vec.size();j++) { if(vec[j]<=min) { min=vec[j]; pos=j; } } return pos; } int judge(vector<int>& left,vector<int>& right) { int flag=0; for(int i=0;i<left.size();i++) for(int j=0;j<right.size();j++) { if((i==0)&&(j==0)) { if(left[i]>right[j]) flag=1; else flag=-1; } if(flag==1) { if(left[i]>right[j]) continue; else return 0; } else if(flag==-1) { if(left[i]<right[j]) continue; else return 0; } } return 1; }
相关文章推荐
- 校招笔试题-玩转南美馆
- 【美团校招在线考试笔试题】钱币面值组合
- Hihocoder #1095 : HIHO Drinking Game (微软苏州校招笔试)( *【二分搜索最优解】)
- 网易2018校招笔试_小易喜欢的数列_C++
- 华为2016校招上机笔试题第一题
- 360校招笔试题
- 2014新浪校招笔试题:取水果(17年第一篇让人懵逼的面试题)
- 大疆2018校招笔试题
- 京东校招前端笔试题:购物车问题
- 腾讯2018校招WEB前端开发笔试有感
- 虹软开发岗校招笔试题目
- 凑硬币(58同城2017校招笔试题)
- 阿里2014校招笔试题(南大)——利用thread和sleep生成字符串的伪随机序列
- 微软2014校招笔试题-String reorder
- 2015 NI 校招笔试机试面试
- 2017年校招全国统一模拟笔试(第一场)编程题集合——超级素数幂
- 【网易】2018校招笔试题
- 2017华为暑期实习生校招笔试
- C/C++校招笔试面试经典题目总结八
- C/C++校招笔试面试经典题目总结九