算法编程题#iOS

全网移动开发iOS开发最新面试题(最新整理) 前言 面试是职场中必经的一个步骤,在短短的几十分钟内去考察一个人的各项能力与综合素质,判断候选人与团队和团队匹配程度。从技术角度来看,面试更像是针对某些知识的讨论,寻求面试官和候选人的知识共通点,从而判断候选人是否满足团队需要。一个恰当的面试不是要难倒候选人,而是要引导候选人展示长处;从候选人熟悉的内容入手,考察技术细节和背后思考。 本文便谈一谈我对iOS面试的一些思考。 iOS的面试大致包括三大部分:基础知识、项目经历、代码考察。 基础知识可以分为: a.计算机基本知识:网络原理、操作系统、编译原理、数据 阅读详情
1. 编程题:假设某一个生物每B年繁殖一次,一次繁殖N只,寿命是M年,编写程序起初有X只生物,求T年之后生物的总数是多少?
@interface Animal ()
/**
  假设某一个生物每B年繁殖一次,一次繁殖N只,寿命是M年,编写程序起初有X只生物,求T年之后生物的总数是多少?
  @param originalCount 起初X只生物
  @param yearsToBreed 每B年繁殖一次
  @param countPerBreed 一次繁殖N只
  @param limitAge 寿命M年
  @param totalYears T年之后
*/
- (void)solvePlanWithOriginalCount:(NSInteger)originalCount yearsToBreed:(NSInteger)yearsToBreed countPerBreed:(NSInteger)countPerBreed limitAge:(NSInteger)limitAge totalYears:(NSInteger)totalYears;

/**
  添加一定数量的Animal对象到数组
  @param number 数量
*/
- (void)addAnimalToArrayWithNumber:(NSInteger)number;

@property (nonatomic, strong) NSMutableArray *arr;//存放对象的数组
@property (nonatomic, assign) NSInteger age;//年龄
@end

@implementation Animal
- (void)solvePlanWithOriginalCount:(NSInteger)originalCount yearsToBreed:(NSInteger)yearsToBreed countPerBreed:(NSInteger)countPerBreed limitAge:(NSInteger)limitAge totalYears:(NSInteger)totalYears {
    self.arr = [[NSMutableArray alloc] init];
    [self addAnimalToArrayWithNumber:originalCount];//初始数量的对象添加到数组

    for (int year = 0; year < totalYears; year++) { 
        NSLog(@"第%zd年-->%.2zd只", year, _arr.count);
        NSInteger lastYearOfCount = _arr.count;//上一年的数量
        for (int index = 0; index < lastYearOfCount; index++) {
            Animal *animal = [_arr objectAtIndex:index];
            animal.age++;
            //死亡年
            if (animal.age >= limitAge) {
                [_arr removeObject:animal];
                index--;
                lastYearOfCount--;
                continue;
            }
            //出生年
            if (animal.age >= yearsToBreed){
                if (!(animal.age % yearsToBreed)) {
                    [self addAnimalToArrayWithNumber:countPerBreed];
                    continue;
                }
            }
        }
        if (year == (totalYears-1))
            NSLog(@"第%zd年-->%.2zd只", year+1, _arr.count);
    }

    NSLog(@"假设某一个生物每%zd年繁殖一次,一次繁殖%zd个只,寿命是%zd年,编写程序起初有%zd只生物,求%zd年之后生物的总数是%zd!", yearsToBreed, countPerBreed, limitAge, originalCount, totalYears, _arr.count);
}
- (void)addAnimalToArrayWithNumber:(NSInteger)number {
    if (!number) return;
    for (int i = 0; i < number; i++) {
        [_arr addObject:[[Animal alloc] init]];
    }
}
@end
2. 有M个数,从中取出N个不相同的数
/**
 有M个数,从中取出N个不相同的数
 @param randomCount M个数
 @param numCount N个数
 @param minCount 随机数最小值
 @param maxCount 随机数最大值
*/
- (void)solvePlanWithRandomCount:(NSInteger)randomCount toGetNumCount:(NSInteger)numCount minCount:(NSInteger)minCount maxCount:(NSInteger)maxCount {
    if (!randomCount && !numCount && (maxCount <= minCount)) return;

    NSMutableArray *randomArray = [NSMutableArray arrayWithCapacity:randomCount];//存放M个随机数的数组
    NSMutableArray *resultArray = [NSMutableArray arrayWithCapacity:numCount];//取出N个数的数组

    //初始化随机数数据
    for (int i = 0; i < randomCount; i++) {
        [randomArray addObject:[self getRandWithMin:minCount andMax:maxCount]];
    }

    //获取
    for (int j = 0; j < numCount; j++) {
        NSString *str = [randomArray objectAtIndex:arc4random_uniform((int)numCount)];
        if (![resultArray containsObject:str]) {
            [resultArray addObject:str];
        }
        else {
            j--;
        }
    }
}
/**
  获取一定范围的随机数
  @param minNum 最小值
  @param maxNum 最大值
*/
- (NSString *)getRandWithMin:(NSInteger)minNum andMax:(NSInteger)maxNum {
    return [NSString stringWithFormat:@"%zd", minNum + arc4random()%(maxNum - minNum)];
    //return [NSString stringWithFormat:@"%zd", minNum + arc4random_uniform(maxNum)];
}
3. 假如电子记时器所显示的十个数字是“0126093028”这样一串数,它表示的是1月26日9时30分28秒.在这串数里,“0”出现了3次,“2”出现了2次,“1”、“3”、“6”、“8”、“9”各出现1次,而“4”、“5”、“7”没有出现.如果在电子记时器所显示的这串数里,“0,1,2,3,4,5,6,7,8,9”这一个数字都只出现一次,称它所表示的时刻为“十全时”那么2003年一共有( )个这样的“十全时?

PS:算法完善打印每个十全时

- (void)get2003 {
    int result = 0;
    //每月多少天数组
    NSMutableArray *dayOfPerMonth = [NSMutableArray array];
    for (int i = 1; i < 13; i++) {
        [dayOfPerMonth addObject:[NSString stringWithFormat:@"%zd", [self howManyDaysInThisYear:2003 withMonth:i]]];
    }

    //二维数组创建
    NSMutableArray *dayArr = [NSMutableArray array];
    for (int i = 0; i < 13; i++) {
        [dayArr addObject:[NSMutableArray arrayWithCapacity:32]];
    }

    //初始化二维数组
    for (int i = 0; i < dayArr.count; i++) {
        for (int j = 0; j < 32; j++) {
            if (i > 0 && j > 0 && j <= [dayOfPerMonth[i==0 ? 0 : i-1] intValue]) {
                [dayArr[i] setObject:@1 atIndexedSubscript:j];
            }
            else {
                [dayArr[i] setObject:@0 atIndexedSubscript:j];
            }
        }
    }

    //得到前四位数的组合
    for (int i = 0; i < dayArr.count; i++) {
        for (int j = 0; j < 32; j++) {
            //第一次筛选
            if ([[dayArr[i] objectAtIndex:j] isEqualToValue:@1]) {
                //月日四位数0101
                NSString *strOfPreFour = [self getPre4StringWithString:[self intToString:i] dayString:[self intToString:j]];
                //判断四位数是否中是否重复或者同时包含0,1,2
                if (![self validateString:strOfPreFour]) {
                    [dayArr[i] setObject:@0 atIndex:j];
                }
            }
            //第二次筛选出结果
            if ([[dayArr[i] objectAtIndex:j] isEqualToValue:@1]) {

                //得到其余六位数
                NSString *strOfPreFour = [self getPre4StringWithString:[self intToString:i] dayString:[self intToString:j]];
                NSMutableArray *arr = [NSMutableArray array];
                for (int h = 0; h < strOfPreFour.length; h++) {
                    [arr addObject:[NSString stringWithFormat:@"%c", [strOfPreFour characterAtIndex:h]]];
                }

                //六位数组
                NSMutableArray *sixArray = [NSMutableArray arrayWithObjects:@"0", @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9",nil];
                [sixArray removeObjectsInArray:arr];

                //六位字符串
                NSString *sixStr = [NSString string];
                for (NSString *str in sixArray) {
                    sixStr = [sixStr stringByAppendingString:str];
                }
                //判断六位数小于6的个数
                int lessSixCount = 0;
                for (int p = 0; p < sixArray.count; p++) {
                    if ([sixArray[p] intValue] < 6) lessSixCount++;
                }
                //判断有没有1,或2
                if (lessSixCount >= 3) {
                    if ([sixStr containsString:@"1"]) {
                        if (lessSixCount == 3) {
                            result += 12;
                            NSLog(@"%@--%@", strOfPreFour, sixStr);
                            //得到六位数字的数组
                            NSMutableArray *sixArray = [NSMutableArray arrayWithCapacity:6];
                            for (int i = 0; i < [sixStr length]; i++) {
                                [sixArray addObject:[NSString stringWithFormat:@"%c",[sixStr characterAtIndex:i]]];
                            }

                        }
                        else  {
                            result +=36;
                            NSLog(@"%@--%@", strOfPreFour, sixStr);
                        }
                    }
                    else if ([sixStr containsString:@"2"]) {
                        if (lessSixCount == 4) {
                            result += 4;
                            NSLog(@"%@--%@", strOfPreFour, sixStr);
                        }
                    }
                }
            }

        }
    }
    NSLog(@"2003年有%i个十全时", result);

}
/**
 *  判断四位数是否中是否重复或者同时包含0,1,2
 *  不满足条件返回NO
 */
- (BOOL)validateString:(NSString *)str {

    if ([str containsString:@"0"] && [str containsString:@"1"] && [str containsString:@"2"]) {
        return NO;
    }
    for (int k = 0; k < str.length; k++) {
        if ([[[str substringToIndex:k] stringByAppendingString:[str substringFromIndex:k+1]] containsString:[NSString stringWithFormat:@"%c", [str characterAtIndex:k]]]) {

            return NO;
        }
    }
    return YES;
}
/**
 *  int类型转换固定字符串,例子:1->01
 */
- (NSString *)intToString:(int)intVal {
    return intVal < 10 ? [NSString stringWithFormat:@"0%i", intVal] : [NSString stringWithFormat:@"%i", intVal];
}
/**
 *  得到月日四位数
 */
- (NSString *)getPre4StringWithString:(NSString *)monthStr dayString:(NSString *)dayStr {
    return [NSString stringWithFormat:@"%@%@", monthStr, dayStr];
}
/**
 *  获得某年某月的天数
 */
- (NSInteger)howManyDaysInThisYear:(NSInteger)year withMonth:(NSInteger)month{
    if((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12))
        return 31 ;

    if((month == 4) || (month == 6) || (month == 9) || (month == 11))
        return 30;

    if((year % 4 == 1) || (year % 4 == 2) || (year % 4 == 3))
        return 28;

    if(year % 400 == 0)
        return 29;

    if(year % 100 == 0)
        return 28;

    return 29;
}
IOS面试题编程机制 71-75 71. 简述有哪几种手势通知方法? -(void)touchesBegan:(NSSet*)touchedwithEvent:(UIEvent*)event; -(void)touchesMoved:(NSSet*)touched withEvent:(UIEvent*)event; -(void)touchesEnded:(NSSet*)touchedwithEvent:(UIEvent*)event; -(void)touchesCanceled:(NSSet*)touchedwi 阅读详情

相关推荐

百度面试题——iOS开发

手触碰到屏幕的时候,响应机制是怎样的?追问 UIView和UIResponse的关系是什么?全是问得iOS方面的问题,问得真的很细,需要基础很扎实,对各个机制真的足够理解,不然确实有点难回答。比如200×300的图片,内存应该占用多少比较合理?Python基础知识,大概是多线程,线程安全,集合类,JVM,类相关知识等。GLSurfaceView的相关知识,OpenGL,Shader,绘制流程。说说你对内存泄漏的看法,追问,block为什么容易引起内存泄漏?询问当前做的项目,以及到具体的实现和优化。

FPGA/MATLAB学习教程/源码/项目合作开发 1348

按照年份计算十全时的个数

题目: 假如电子计时器所显示的十个数字是“1115093028”这样一串数,它表示的数是11月15日9时30分28秒. 在这串数中,“0”出现了2次,“1”出现了三次,“2”、“3”、“5”、“8”、“9”各出现了一次, 而“4”、“6”、“7”没有出现.如果在电子计时器所显示的这串数里,0,1,2,3,4,5,6,7,8,9这 十个数字都只出现一次,称它所表示的时刻为“十全时”,那么2...

weixin_30525825的博客 346

IOS面试题编程机制 46-50

46. 阐述 Method Swizzle(黑魔法),什么情况下会使用? 1). 在没有一个类的实现源码的情况下,想改变其中一个方法的实现,除了继承它重写、和借助类别重名方法暴力抢先之外,还有更加灵活的方法 Method Swizzle。 2). Method Swizzle 指的是改变一个已存在的选择器对应的实现的过程。OC中方法的调用能够在运行时通过改变,通过改变类的调度表中选择器到最终函数间的映射关系。 3). 在OC中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是sel

我很好 605

iOS 面试题总结(可能是最全的!!!)

不设置监听,就可以关闭了。实现思想:当设置监听一个对象时,动态创建一个新的继承被监听对象原本类的类,并重写setter方法,最后把这个对象的isa指针(即这个对象的类的内存地址)更改为这个新创建的类,这时,这个对象就变成了这个新类的实例重写addobserver方法:(1)检查该对象的类有没有对应的setter方法,如果没有就抛出异常(2)检查对象的类是不是一个kvo类,如果不是,就新建一个继承这个类的新类,并把对象的isa指向这个新类。

sgliquangang的专栏 1万+

IOS面试题编程机制 21-25

21. IOS使用Runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么? 在ARC下不需要 在MRC中,对于使用retain或copy策略的需 22. 能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量? 因为编译后的类已经注册在 runtime 中,类结构体中的 objc_ivar_list 实例变量的链表 和 instance_size 实例变量的内存大小已经确定,同时runtime 会调用 class_setIvarLayout

我很好 785

iOS开发试题大全:笔试面试一千题[常识篇]

iOS开发试题大全:笔试面试一千题,包含1000道iOS试题和参考答案,题型包含:判断题、单选题,多选题和面试题。分为这套资料共分为"语法","常识","界面","iOS","操作","数据结构","多线程","网络","多媒体","安全"十个篇章。 大家可以利用这些试题加强iOS开发的理论知识,当然对面试也是很有帮助的! 试题参考答案在每篇的最后一页。

iOS调试WebView,简单到无门槛

点击上方“iOS开发”,选择“置顶公众号”关键时刻,第一时间送达!    先不说楚枫的这般年纪,能够踏入元武一重说明了什么,最主要的是,楚枫在刚刚踏入核心地带时,明明只是...

iOS_开发 625

iOS开发试题大全:笔试面试一千题[语法篇]

iOS开发试题大全:笔试面试一千题,包含1000道iOS试题和参考答案,题型包含:判断题、单选题,多选题和面试题。分为这套资料共分为"语法","常识","界面","iOS","操作","数据结构","多线程","网络","多媒体","安全"十个篇章。 大家可以利用这些试题加强iOS开发的理论知识,当然对面试也是很有帮助的! 试题参考答案在每篇的最后一页。

十全时数——java代码(深搜)

假如电子计时器所显示的十个数字是“1115093028”这样一串数,它表示的数是11月15日9时30分28秒. 在这串数中,“0”出现了2次,“1”出现了三次,“2”、“3”、“5”、“8”、“9”各出现了一次, 而“4”、“6”、“7”没有出现.如果在电子计时器所显示的这串数里,0,1,2,3,4,5,6,7,8,9这 十个数字都只出现一次,称它所表示的时刻为“十全时”,那么2003年一共有

Me丿以卿之名 2266

iOS编程(第5版) 实例代码

iOS.Programming.The.Big.Nerd.Ranch.Guide.5th.Edition书中全部例子代码~

iOS开发试题大全:笔试面试一千题[界面篇]

iOS开发试题大全:笔试面试一千题,包含1000道iOS试题和参考答案,题型包含:判断题、单选题,多选题和面试题。分为这套资料共分为"语法","常识","界面","iOS","操作","数据结构","多线程","网络","多媒体","安全"十个篇章。 大家可以利用这些试题加强iOS开发的理论知识,当然对面试也是很有帮助的! 试题参考答案在每篇的最后一页。

iOS开发之2019最新面试题大全

1.tcp三次握手,建立连接与tcp四次挥手,断开连接 建立连接/tcp三次握手: 1.第一次握手: 由客户端发送一个叫做SYN(SYN=J)包到服务器, 并且进入SYN_SEND状态, 然后就翘着二郎腿等服务器回应. 2.第二次握手: 服务器接收到了SYN包, 必须确认客户端的SYN(ACK=J+1), 同时也会发送一个SYN(SYN=K)包, 也就是SYN+ACK, 此时轮到服务器跷二郎腿,...

Simona_1973的博客 4244

精选iOS开发1000题,包含笔试题600道和面试题400道。基于Swift和Objective-C语言的知识点。.zip

精选iOS开发1000题,包含笔试题600道和面试题400道。基于Swift和Objective-C语言的知识点。.zip

ios笔试题算法_【2018年最新】iOS面试题之算法

1、不用中间变量,用两种方法交换A和B的值// 1.中间变量void swap(int a, int b) {int temp = a;a = b;b = temp;}// 2.加法void swap(int a, int b) {a = a + b;b = a - b;a = a - b;}// 3.异或(相同为0,不同为1. 可以理解为不进位加法)void swap(int a, int b)...

weixin_39625337的博客 159

STM8S全解析之系列文章4---STM8S芯片项目升级引导程序(使用中断接收升级数据)

STM8S全解析之系列文章4—STM8S芯片项目升级引导程序(使用中断接收升级数据) 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 文章目录STM8S全解析之系列文章4---STM8S芯片项目升级引导程序(使用中断接收升级数据)前言一、Flash划分boot和App二、使用步骤1.引入库2.读入数据总结 前言 用过STM8S都知道它没有中断向量重定向,也就意味着STM8S的中断向量没办法指向其他的位置,间接说明升级的引导

weixin_39853312的博客 1030

手机OIS马达拆解:从苹果的悬丝到三星的滚珠,不同方案如何影响你的拍照体验?

本文深度解析手机OIS马达技术,对比苹果悬丝式、三星滚珠式和LG记忆合金式三种主流方案的机械原理与成像体验差异。通过详实的数据和测试结果,揭示不同OIS技术如何影响防抖性能、模组厚度及长期可靠性,为摄影爱好者和技术爱好者提供实用选购建议。

weixin_42554408的博客 303

ios 经典算法(持续更新)

1.题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?  1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去  掉不满足条件的排列。  2.程序源代码     int i, j, k;     for (int i =1; i5; i ++)     {         for (j =1 ; j5; j++)      

u013636334的博客 1280

android+音乐节拍检测,科学网—音乐节拍跟踪或音乐节拍检测软件,LilyBeats alpha - 石自强的博文...

我们设计并实现了一种用于实时跟踪音乐节拍的软件。该软件可以用于智能灯方案提供商,为其提供灯光随音乐变化的核心解决方案。首先给出软件的下载链接:或者音乐节拍是乐曲中表示固定单位时值和强弱规律的组织形式,亦称拍子。它有两个特性:周期性和连续性。节拍周期性表现为节拍结构,是乐曲中周期性出现的节奏序列。节拍连续性表现为音乐的平均速度,其单位为bpm(beat per minute每分钟音乐节拍的个数)。音...

weixin_39571403的博客 1400

iOS面试题

1.#import和#include的区别 @class? @class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文 件中还是需要使用#import 而#import比起#include的好处就是不会引起交叉编译 2. readwrite,readonly,assign,retain,copy,nonatomic 属性的作用 @property是 一个属性访...

whuizhou的专栏 1294

手把手教你用STM32+LAN8720搭建以太网通信模块(含原理图)

本文详细介绍了如何使用STM32微控制器与LAN8720物理层芯片搭建以太网通信模块,涵盖硬件设计、软件配置及常见问题排查。重点讲解了LAN8720的低功耗设计、RMII接口简化布线等特性,以及STM32CubeMX配置和LwIP协议栈移植技巧,助力开发者快速实现稳定可靠的嵌入式网络通信。

CAT789的专栏 411

Abaqus滞回问题求解—浆锚连接装配式剪力墙滞回模拟

当下土木工程研究生,多数都在从事装配式混凝土构件安全或装配式混凝土构件连接节点力学性能的研究。研究这类问题,几乎脱离不开对有限元软件的使用,Abaqus求解能力非常强大,但模型处理能力相对较弱。装配式混凝土结构的有限元计算与传统现浇结构相比,其节点处理起来相对复杂,计算结果往往需要凸显出连接节点力学特性,所以对建模精程度的要求较高。所以向大家介绍一款工具—HyperMesh软件(一下简称Hm),它是专业的有限元前处理工具,用于处理装配式混凝土构件或连接节点有限元模型比较合适。这篇文章主要介绍如何利用Hm处理

qq_31918049的博客 2901

iOS面试题系列之常见算法

iOS面试中熟悉常见算法1、 对以下一组数据进行降序排序(冒泡排序)。“24,17,85,13,9,54,76,45,5,63” int main(int argc, char *argv[]) { int array[10] = {24, 17, 85, 13, 9, 54, 76, 45, 5, 63}; int num = sizeof(array)/sizeof(int);

Spencer Yang的博客 2万+

WVP-GB28181-Pro配置避坑指南:从零到上线全流程详解(含ZLM自动同步技巧)

本文详细解析了WVP-GB28181-Pro视频平台的配置流程,特别针对国标视频平台部署中的常见陷阱,如stream-ip/sdp-ip配置错误、ZLM自动同步问题及端口冲突等,提供了实用的解决方案和优化建议,帮助开发者快速实现从零到上线的全流程部署。

weixin_30836759的博客 93

iOS面试题大全2021(附答案)

1、简述你项目中常用的设计模式。它们有什么优缺点?常用的设计模式有:代理、观察者、单例。(1)单例:它是用来限制一个类只能创建一个对象。这个对象中的属性可以存储全局共享的数据。所有的类都能访问、设置此单例中的属性数据。优点:是它只会创建一个对象容易供外界访问,节约性能。缺点:是一个类只有一个对象,可能造成责任过重,在一定程度上违背了“单一职责原则”。单例模式中没有抽象层,所以单例类的扩展有很大的困难

Spencer Yang的博客 1万+

多普勒效应及多普勒频移的简单推导

多普勒频移的简单推导

m0_47867419的博客 3万+

【STM32实物】基于STM32设计的智能仓储管理系统

近年来,随着我国仓储发展的和药品需求的不断增多,许多医院都采用药物仓储管理系统。我国的药物仓储产业已经有了长足的发展,仓库的规模不断变大,对仓储的要求也不断增高,药物的存储,识别以及对仓储环境条件的要求成为仓储的重要决策,他们可以根据不同的特点在不同场景中使用。本文详细介绍了一个基于单片机技术的智能仓储管理系统的设计与实现,这个系统可谓是集射频识别(RFID)技术和环境监测传感器于一身,旨在提高仓储操作的自动化和精确度。

嵌入式阿齐Archie 1万+
上一篇: iOS开发中Button不显示问题
下一篇: 算法题
daniel_xing
博客等级 码龄14年 4粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值