您的位置:首页 > 职场人生

iOS面试中常见的算法题目

2016-06-28 11:17 531 查看
一、前言

  这里是在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、河左边有:狼、羊、白菜,一个人过河,一次只能带走一件东西,怎么做能够保证三物都到河右边?规则(狼吃羊、羊吃白菜)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: