iOS面试中常见的算法题目
2016-06-28 11:17
531 查看
一、前言
这里是在iOS求职中自己遇到的算法题,希望对大家有所帮助。不定期更新。如果大家想在线运行代码调试,可以将代码拷贝到这里。然后进行调试。下面就是常见的算法题目。
二、正文
1、就n的阶乘。(这里只是用于小数,大数会越界)
思路:这里面用递归实现
运行结果如下:
2、判断一个字符串是否是ip。
思路:先将字符串分割到两个数组里面(一个数字数组,一个字符数组),然后判断数字数组内容是否满足ip条件,字符数组里面是否是"."。这里面主要用了sscanf函数。代码如下:
运行结果如下:
3、二分查找
思路:二分查找又称折半查找,前提是待查找表为有序表。将查找目标与数组中间的数对比,如果大于中间的数就在中间数和最大数之间查找,如果小于中间数就在小数和中间数之间查找。
运行结果为:
其中-1为查找失败
4、100层楼2个鸡蛋问题?
5、字符串反转输出问题?
6、红黑树?
7、河左边有:狼、羊、白菜,一个人过河,一次只能带走一件东西,怎么做能够保证三物都到河右边?规则(狼吃羊、羊吃白菜)
这里是在iOS求职中自己遇到的算法题,希望对大家有所帮助。不定期更新。如果大家想在线运行代码调试,可以将代码拷贝到这里。然后进行调试。下面就是常见的算法题目。
二、正文
1、就n的阶乘。(这里只是用于小数,大数会越界)
思路:这里面用递归实现
#include <stdio.h> int getNJ(int n) { if (n==1 || n==0) { return 1; } return n*getNJ(n-1); } int main() { printf("%d",getNJ(10)); return 0; }
运行结果如下:
3628800
2、判断一个字符串是否是ip。
思路:先将字符串分割到两个数组里面(一个数字数组,一个字符数组),然后判断数字数组内容是否满足ip条件,字符数组里面是否是"."。这里面主要用了sscanf函数。代码如下:
#include <stdio.h> int checkIP(const char *p) { int n[4]; char c[4]; if (sscanf(p,"%d%c%d%c%d%c%d%c",&n[0],&c[0],&n[1],&c[1],&n[2],&c[2],&n[3],&c[3])==7) { int i; for (i=0;i<3;i++) { if(c[i]!='.') { return 0; } } for (i=0;i<4;i++) { if (n[i]>255||n[i]<0) { return 0; } } return 1; }else { return 0; } } int main() { const char *x[] = { "132.168.1.1", "10.0.0.1.", "127.256.0.1", "iudfdsfdasfdaf", "172.16,2.1" }; const char *m[] = { "不是合法的IP地址", "是合法的IP地址" }; int i=0; while(x[i]!=0) { printf("%s %s\n",x[i],m[checkIP(x[i])]); i++; } return 0; return 0; }
运行结果如下:
132.168.1.1 是合法的IP地址 10.0.0.1. 不是合法的IP地址 127.256.0.1 不是合法的IP地址 iudfdsfdasfdaf 不是合法的IP地址 172.16,2.1 不是合法的IP地址
3、二分查找
思路:二分查找又称折半查找,前提是待查找表为有序表。将查找目标与数组中间的数对比,如果大于中间的数就在中间数和最大数之间查找,如果小于中间数就在小数和中间数之间查找。
#include <stdio.h> int bsearchMethod(int arr[],int low,int high,int target) { while (low<high) { int mid = (low+high)/2; if (arr[mid]>target) { high = mid-1; }else if(arr[mid]<target){ low = mid+1; }else { return mid; } } return -1; } int main(void) { int arr[] = {1,2,4,6,8,12,17,23,45,67,78}; printf("查找数在数组第%d位",bsearchMethod(arr,0,10,12)); return 0; }
运行结果为:
查找数在数组第5位
其中-1为查找失败
4、100层楼2个鸡蛋问题?
5、字符串反转输出问题?
6、红黑树?
7、河左边有:狼、羊、白菜,一个人过河,一次只能带走一件东西,怎么做能够保证三物都到河右边?规则(狼吃羊、羊吃白菜)
相关文章推荐
- 面试题之数三退一智力游戏
- 面试题之数三退一智力游戏
- JDBC 笔记(2)
- 为什么每个程序员都应该懂点前端知识?
- 为什么每个程序员都应该懂点前端知识?
- 互联网行业的HR怎么看待30岁以上的基础岗位求职者
- 送给新入IT运维的职场搬砖人(学习篇之系统运维)
- 学习面试题(day01)
- 学习面试题Day02
- 学习面试题Day03
- 学习面试题Day04
- 学习面试题Day05
- 学习面试题Day06
- 学习面试题Day07
- 学习面试题Day08
- iOS面试之runtime
- 程序员福利:大牛收藏5年的开发资料
- 程序员==学习笔记==java基础==day06==构造方法
- 程序员==学习笔记==java基础==day06==面向对象
- 面试经典70题--人事面