[微软面试100题]61-70
第六十一题:找出整型数组中两个只出现了一次的数(其余都出现了两遍)
void twoSingleNum(const int *a,int cnt){int tmp=0;for(int i=0;i<cnt;++i) tmp^=a[i];//比较短的时候放后面int mark=1;while( (tmp&mark)==0)mark<<=1;// mark<<1 has no effect on markint num1=0,num2=0;for(int i=0;i<cnt;++i)(a[i]&mark)==0 ? num1^=a[i] : num2^=a[i];//must have (), &'s priority is very low.cout<<num1<<" "<<num2<<endl; }
第六十三题:删除字符串中的特定字符
void delChars(char s[],const char *chars){int hash[256];memset(hash,0,sizeof(int)*256);while(*chars!='\0'){hash[int(*chars)]=1;chars++;}char *pFast=s,*pSlow=s;while(*pFast!='\0'){if(hash[int(*pFast)]==0){*pSlow=*pFast;pSlow++;}pFast++;//相当于把不删的复制到前面的slow,删的就跳过 }*pSlow='\0'; }
第六十四题:寻找丑数(从小到大打印1500个丑数)
void generateUglyNum(int n){int buf[n+10];buf[0]=1;buf[1]=2;buf[2]=3;buf[3]=4;buf[4]=5;int *p2=buf,*p3=buf,*p5=buf;for(int i=5;i<n;++i){while(*p2*2<=buf[i-1])p2++;unsigned int c1=*p2*2;while(*p3*3<=buf[i-1])*p3++;unsigned int c2=*p3*3;while(*p5*5<=buf[i-1])*p5++;unsigned int c3=*p5*5;if(c1<=c2 && c1<=c3)buf[i]=c1;if(c2<=c1 && c2<=c3)buf[i]=c2;if(c3<=c1 && c3<=c2)buf[i]=c3;cout<<i+1<<":"<<buf[i]<<endl;}
第六十五题:输出1到最大的N位数
void helper(int n){int tmp=0;for(int i=0;i<n;++i){tmp+=9;if(i!=n-1)tmp*=10;}for(int i=1;i<=tmp;++i){cout<<i<<" ";}cout<<endl; }
第六十六题:利用递归翻转一个栈
template <class T> void reverse_stack_recursive(stack<T> &s){if(!s.empty()){T tmp=s.top();s.pop();reverse_stack_recursive(s);//从顶到底一个一个拿开putToButtom(s,tmp);//从栈最低的元素一个一个放回,但是每次都返回栈底 } }template <class T>//这是一种栈的常用操作,先拿出来,再放回去 void putToButtom(stack<T> &s,T &tmp){if(s.empty()){s.push(tmp);//拿到没有了,就放这个目标元素到栈底return;}T o=s.top();//将栈里的元素一个一个拿开 s.pop();putToButtom(s,tmp);//直到栈为空,放进目标元素s.push(o);//再一个一个放回去 }
第六十七题:扑克牌顺序
int has_gap(int a[],int l,int allowGaps){for(int i=1;i<5-l;++i){//不同王数for的长度不一,这里用一个参数来传递for的长度就可以实现代码重用,不用写3个for了。if(a[i]-a[i-1]==0)return 0;allowGaps-=a[i]-a[i-1]-1;}if(allowGaps<0)return 0;return 1; }int is_sequence_good(int a[]){//14 is the kingsort(a,a+5);if(a[3]==14 && a[4]==14)return has_gap(a,2,2);//double kingselse if(a[4]==14)return has_gap(a,1,1);else return has_gap(a,0,0); }
第六十七题:打印出n粒骰子的点数和的出现概率
void showDicePro(int n){#define DICE_NUM 6 //为以后扩展做准备,注意扩展性可以给面试官好印象int p[n][DICE_NUM*n+1];memset(p,0,sizeof(int)*(DICE_NUM*n+1)*n);for(int j=1;j<=DICE_NUM;++j) p[0][j]=1;//初始化1颗骰子的情况for(int i=1;i<n;++i)for(int j=1;j<=DICE_NUM*n;++j)for(int k=j-DICE_NUM;k<j;++k)if(k>=0) p[i][j]+=p[i-1][k];//n粒的情况DP n-1的for(int i=1;i<=DICE_NUM*n;++i) cout<<p[n-1][i]<<" ";cout<<endl; }
第六十八题:把数组组成最小的数
bool fronter(int a,int b){//思路1vector<int> va,vb,tmp;while(a!=0){tmp.push_back(a%10);a/=10;}while(!tmp.empty()){va.push_back(tmp.back());tmp.pop_back();}while(b!=0){tmp.push_back(b%10);b/=10;}while(!tmp.empty()){vb.push_back(tmp.back());tmp.pop_back();}//比较长度int lena=va.size();int lenb=vb.size();int i=0,j=0;while(i<lena || j<lenb){if(va[i]<vb[j] && i<lena && j<lenb)return true;if(va[i]>vb[j] && i<lena && j<lenb)return false;if(i==lena && j==lenb)return false;if(i==lena && j!=lenb){//前面的放前面就是trueif(vb[j]>vb[j-lena])return true;//短在前else if(vb[j]<vb[j-lena]) return false;}//多出来的位与第一位比if(i!=lena && j==lenb){if(va[i]>va[i-lenb])return false;//短在前else if(va[i]<va[i-lenb])return true;}if(i<lena)++i;if(j<lenb)++j;}return true; }bool helper(int a,int b){//思路2char sa[50],sb[50];sprintf(sa,"%d",a);sprintf(sb,"%d",b);string stra(sa),strb(sb);return stra+strb<strb+stra; }void final(int *num,int n){vector<int> a;for(int i=0;i<n;++i)a.push_back(num[i]);sort(a.begin(),a.end(),helper);for(unsigned int i=0;i<a.size();++i){cout<<a[i];}cout<<endl; }
第六十九题:旋转数组中的最小数
void helper(int *a,int n){if(n==2){if(a[0]>a[1])cout<<a[1]<<endl;else cout<<a[0]<<endl;return;}int mid=n/2;if(a[0]>a[mid])helper(a,mid+1);//有旋转else if(a[mid]>a[n-1])helper(a+mid,n-mid);//有旋转else if(a[0]<a[mid])helper(a,mid+1);//没旋转else helper(a+mid,n-mid);//没旋转 }
转载于:https://www.cnblogs.com/iyjhabc/archive/2013/03/28/2986020.html
[微软面试100题]61-70相关推荐
- 微软面试100题(含全部答案)
引言 无私分享造就开源的辉煌. 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年.在一周年之际,特此分享出微软面试全部100题答案的完整版,以作为对本博客所有读者的回馈. 一年之前的10月1 ...
- 微软面试100题2010年版全部答案集锦
微软等数据结构+算法面试100题全部答案集锦 作者:July.阿财. 时间:二零一一年十月十三日. 引言 无私分享造就开源的辉煌. 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年.在一 ...
- 重磅分享:微软面试100题2010年版全部答案完整亮相
欢迎zhangxusoftgcy我的:资源博客空间简历设置|帮助|退出 CSDN首页 资讯 论坛 博客 下载 搜索 更多 CTO俱乐部 学生大本营 培训充电 移动开发 软件研发 云计算 程序员 TUP ...
- 微软面试100题2010年版全部答案集锦(含下载地址)
微软等数据结构+算法面试100题全部答案集锦 作者:July.阿财. 时间:二零一一年十月十三日. 引言 无私分享造就开源的辉煌. 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年.在一周年 ...
- 精:微软面试100题2010年版全部答案集锦
https://blog.csdn.net/v_july_v/article/details/6870251 作者:July.阿财. 时间:二零一一年十月十三日. 引言 无私分享造就开源的辉煌. 今是 ...
- [转]微软面试100题——要想成为盖茨就来试试!
微软面试100题--要想成为盖茨就来试试!(转贴) 1为什么下水道的井盖是圆的? 2美国有多少辆车?(一个常见的类似问题是:美国有多少家加油站?) 3美国有多少个下水道井盖? 4你让某些人为你工作了 ...
- 【从零单排之微软面试100题系列】09二叉查找树的后序遍历
本题目选自July大神博客系列[微软面试100题]: july大神,该系列我主要用来记录我的学习笔记. 题目描述:输入1个整数数组,判断该数组是不是某二元查找树的后序遍历结果.数组保证任意两个数组均不 ...
- 微软面试100题2010年版全部答案集锦 含下载地址
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 微软等数 ...
- 微软面试100题——要想成为盖茨就来试试!
1为什么下水道的井盖是圆的? 2美国有多少辆车?(一个常见的类似问题是:美国有多少家加油站?) 3美国有多少个下水道井盖? 4你让某些人为你工作了七天,你要用一根金条作为报酬.这根金条要被分成七块.你 ...
- 微软面试100题【机密】
1为什么下水道的井盖是圆的? 2美国有多少辆车?(一个常见的类似问题是:美国有多少家加油站?) 3美国有多少个下水道井盖? 4你让某些人为你工作了七天,你要用一根金条作为报酬.这根金条要被分成七块.你 ...
最新文章
- IT工作者,你们的爱情是这样的吗?
- HttpUnit学习笔记
- 我猜你不知道知乎这么个大系统是咋部署的!
- python datetime 加一个月_Python 如何计算当前时间减少或增加一个月
- Ubuntu 14.04 hadoop单机安装
- 远程Service的显示 / 隐式启动
- 那些2019年会爆发的泛娱乐黑科技风口——网易MCtalk泛娱乐创新峰会揭秘
- Matlab--view函数详解
- Spring Cloud 微服务入门(一)--初识分布式及其发展历程
- 数据三等分离散python_plotnine:Python版的ggplot2包
- 值的珍藏!三分钟了解如何用elman神经网络进行预测
- ETL设计详解(数据抽取、清洗与转换)
- 一文告诉您游戏开发需要学什么
- 正则表达式 '^[a-zA-Z0-9''-'\s]{1,30}$' 代表什么意思?
- Python实战案例01
- 在oracle存储过程中创建临时表
- 8月9日个人训练小结
- Android11 刷机教程
- 论CRM免费软件的弊端
- 学软件开发的理由_成为软件开发人员的8个理由