判断给定的一个不限长的数字串大小变化趋势、经典面试题:猴子排成圈踢出求最后剩下大王编号以及Debian服务器php中安装IMAP扩展各种报错解决过程

一、判断给定的一个不限长的数字串大小变化趋势

    自制了一道面试题:给定一个不限长的数字字符串,判断每一位数字的大小变化趋势是否是^或v趋势,如果是就返回true,如果不是就返回false。比如121即属于^,322129即属于v。这是一道相对较简单的笔试题,不过可以看看应聘者的动手能力和思考能力。代码示例如下:

<?php
#给定一个不限长的数字字符串,判断每一位数字的大小变化趋势是否是^或v趋势
$args = getopt('a:');
extract($args);
echo "入参:a{$a}\n";

function checkOne($str){
    $arrow = false;
    $level = 0;
    for($i = 1; $i<strlen($str); $i++){
        $char = $str{$i};
        if(!is_numeric($char)){
            return false;
        }else{
            if($char > $str{$i-1}){
                $newarrow = 'up';
            }elseif($char <$str{$i-1}){
                $newarrow = 'down';
            }   
        }   
        if($arrow != $newarrow){
            $arrow = $newarrow;
            $level ++; 
        }   
    }   
            
    if($level >2 ) return false;
    return true;
}

var_dump(checkOne($a));

     从代码中可以看到,主要的思路就是判断数字大小趋势发生转折的点,判断有几次转折。因此这道题也可以改成判断数字串的大小变化趋势是否是^v^v这种等,代码上难度没有什么增加,不过在正解及由问题转化成思路的难度上对应聘者会有一点增加。示例代码运行结果如下:

[root@04007 php]# php line.php -a=123578954
入参:a123578954
bool(true)
[root@04007 php]# php line.php -a=12357895478
入参:a12357895478
bool(false)
[root@04007 php]# php line.php -a=1239965331
入参:a1239965331
bool(true)
[root@04007 php]# php line.php -a=1239a965331
入参:a1239a965331
bool(false)

二、经典面试题:一群猴子排成一圈,数到第m只,把它踢出圈,求最后剩下的那只大王编号

    题目:一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。使用程序模拟该过程。

 #. 问题解决方法:解答1:

        构建一个n个元素的数组,按顺序进行剔除,超过末尾则进行从头开始,在每次删除元素后重置一下数组。实现如下:

#经典面试题:一群猴子排成一圈,数到第m只,把它踢出圈,求最后剩下的那只大王编号
#007.cn

$args = getopt('a:m:');
extract($args);
echo "入参:a{$a}, m:{$m} 求大王编号->\n";

function lastMonkey($a, $m){
    $monkey = range(1,$a);
    echo "初始编号:",implode(',', $monkey),"\n";
    $index =0; 
    #猴子数量大于1就一直进行剔除
    $cycle = 1;
    while(count($monkey) > 1){ 
        $index += $m-1;
        if($index>count($monkey)-1){
            $index = $index%(count($monkey));
        }   
        unset($monkey[$index]);
        $monkey = array_values($monkey);
        echo "第{$cycle}轮.剔除后编号:",implode(',', $monkey),"\n";
        $cycle++;
        usleep(300);
    }   
    return current($monkey);
}

echo "最终大王编号:". lastMonkey($a, $m)."\n\n";

 #. 问题解决方法:解答2:

        构建一个n个元素的数组,不从头开始,但将不剔除的元素放至最后,直至只剩一个元素,实现如下:

#经典面试题:一群猴子排成一圈,数到第m只,把它踢出圈,求最后剩下的那只大王编号
#04007.cn

echo "入参:a{$a}, m:{$m} 求大王编号->\n";
function domonkey($a ,$m){
    $monkey = range(1, $a);
    echo "初始编号:",implode(',', $monkey),"\n";
    $i = 1;
    while(count($monkey) > 1){ 
        #只要不是m的倍数就放至队列最后,否则就剔除
        if( $i % $m ){
            array_push($monkey, array_shift($monkey));
        }else{
            array_shift($monkey);
            echo '第'.($i/3)."轮.剔除后编号:",implode(',', $monkey),"\n";
        }   
        $cycle++;
        $i++;
    }   
    return current($monkey);
}
echo '大王编号:'.domonkey($a,$m), "\n";

 #. 问题解决方法:执行结果

在服务器上执行php脚本命令及输出过程截图如下:

三、Debian服务器php中安装IMAP扩展各种报错解决过程

    因业务中需要,我需要在php中执行QQ邮箱登录并拿回QQ邮箱中的邮件。服务器是DEBIAN服务器,环境是docker安装的php环境。在PHP中使用imap_open函数打开邮箱连接(记得在邮件设置中打开IMAP功能)。执行imap_open函数需要安装php_imap扩展,如果是windows下去除php_imap.dll扩展注释。

 Fatal error: Uncaught Error: Call to undefined function imap_open() in D:\mail.php:10 Stack trace: #0 {main} thrown Who works with NT systems, can open the file "\xampp\php\php.ini" to active the php exstension by removing the beginning semicolon at the line ";extension=php_imap.dll". Should be: extension=php_imap.dll

    但在Debian服务器中的docker环境下安装imap扩展还是遇到了一麻烦。直接进docker下php容器,开始安装。报错:configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information. 

root@2123245efdr5:/var/www# docker-php-ext-install imap
checking for IMAP Kerberos support... no
checking for IMAP SSL support... no
checking for utf8_mime2text signature... new
checking for U8T_DECOMPOSE... 
configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information.

    找了一下需要安装libc-client-devel模块,不过找了找发现这个模块名称只是适用于centos等,对Debian服务器没法安装,报错E: Unable to locate package libc-client-devel,因为根本不叫这名字。Debian -- Error 这里有说明这个包在debian下的完整名称。也可以使用apt-cache search libc-client搜索相关的包,发现需要使用ibc-client2007e-dev。

#在debian服务器下执行apt-get install libc-client-devel会报无法找到包文件
user@n123:~$ sudo apt-get install libc-client-devel
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package libc-client-devel
#通过apt-cache search libc-client搜索查找
user@n123:~$ sudo apt-cache search libc-client
libc-client2007e - c-client library for mail protocols - library files
libc-client2007e-dev - c-client library for mail protocols - development files
uw-mailutils - c-client support programs
#需要使用如下
root@4ba2159bfcd0:/var/www# apt-get install libc-client2007e-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
......
After this operation, 3816 kB of additional disk space will be used.
Do you want to continue? [Y/n] y......

    但仍然没有结束,安装时还遇到报错:configure: error: This c-client library is built with Kerberos support.Add --with-kerberos to your configure line. Check config.log for details.看提示是让我们在后面加一些选项,于是增加选项再执行安装.

root@4009lki4434dd:/var/www# docker-php-ext-install imap
checking for utf8_mime2text signature... new
checking for U8T_DECOMPOSE... 
checking for pam_start in -lpam... yes
checking for crypt in -lcrypt... yes
configure: error: This c-client library is built with Kerberos support.
      Add --with-kerberos to your configure line. Check config.log for details.
#提示安装时添加--with-kerberos,增加选项再执行安装
root@4009lki4434dd:/var/www# docker-php-ext-configure imap --with-kerberos --with-imap-ssl && docker-php-ext-install imap
checking for crypt in -lcrypt... yes
checking for krb5-config... no
configure: error: Kerberos libraries not found.
      Check the path given to --with-kerberos (if no path is given, searches in /usr/kerberos, /usr/local and /usr )

    选项是加了,但看提示是加的选项没有作用,因为默认的路径里找不到Kerberos libraries,此原因是因为没有安装Kerberos libraries。于是执行安装libkrb5-dev库,这一步成功之后再进行安装imap就成功了。

#安装libkrb5-dev库
root@4009lki4434dd:/var/www#  apt-get install libkrb5-dev
#最后执行安装imap安装成功:
root@4009lki4434dd:/var/www# docker-php-ext-configure imap --with-kerberos --with-imap-ssl && docker-php-ext-install imap
#如果已经安装了也可尝试使用下面的命令指定kerberos库的目录 
docker-php-ext-configure imap --with-kerberos-inc=/usr/include --with-imap-ssl && docker-php-ext-install imap

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/872770.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Verilog和Matlab实现RGB888互转YUV444

文章目录 一、色彩空间1.1 RGB色彩空间1.2 CMYK色彩空间1.3 YUV色彩空间 二、色彩空间转换公式2.1 RGB转CMYK2.2 CMYK转RGB2.3 RGB888转YUV4442.4 YUV444转RGB888 三、MATLAB实现RGB888转YUV4443.1 matlab代码3.2 matlab结果 四、Verilog实现RGB888转YUV444 一、色彩空间 色彩空…

【区块链 + 物联网】区块链边缘计算网关设备 | FISCO BCOS应用案例

目前边缘端设备主要以人工智能应用为主&#xff0c;或以数据采集网络设备为主&#xff0c;还未有区块链边缘计算网关设备&#xff0c;难以 在依托终端设备的传统行业中进行区块链 应用。本项目研制区块链边缘计算网关&#xff0c;将区块链、计算与网络集成 在一起&#xff0c;…

单片机学习笔记

一、单片机帝国的诞生与发展 1.1 单片机的基本概念 单片机是一种集成电路芯片&#xff0c;采用超大规模的集成电路把具有数据处理功能的中央处理器存储器、输入输出端口、外围电路和相关外设集成在一块硅片上构成一个小而完整的微型计算机系统。 一般而言&#xff0c;单片机也…

Java语言程序设计基础篇_编程练习题**17.21 (十六进制编辑器)

目录 题目&#xff1a;**17.21 (十六进制编辑器) 代码示例 结果展示 题目&#xff1a;**17.21 (十六进制编辑器) 编写一个 GUI 应用程序&#xff0c;让用户在文本域输入一个文件名&#xff0c;然后按回车键&#xff0c;在文本域显示它的十六进制表达形式。用户也可以修改十六…

分类预测|基于蜣螂优化极限梯度提升决策树的数据分类预测Matlab程序DBO-Xgboost 多特征输入单输出 含基础模型

分类预测|基于蜣螂优化极限梯度提升决策树的数据分类预测Matlab程序DBO-Xgboost 多特征输入单输出 含基础模型 文章目录 一、基本原理1. 数据准备2. XGBoost模型建立3. DBO优化XGBoost参数4. 模型训练5. 模型评估6. 结果分析与应用原理总结 二、实验结果三、核心代码四、代码获…

1-9 图像膨胀 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 kernel np.ones((3, 3), np.uint8) _, binary_image cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) dilated_image cv2.dilate(binary_image, kernel, iterations1) 三、运行现象 四、完整代码 五、完整工程贴出 一、提前准备 …

scrapy 爬取微博(一)【最新超详细解析】:创建微博爬取工程

本项目属于个人学习记录&#xff0c;爬取的数据会于12小时内销毁&#xff0c;且不可用于商用。 1 初始化环境 首先我们需要有python环境&#xff0c;先安装一下python&#xff0c;然后配置环境变量&#xff0c;这边给出windows的配置&#xff1a; 我这边的安装目录是D:\pyt…

PHP轻量级高性能HTTP服务框架 - webman

摘要 webman 是一款基于 workerman 开发的高性能 HTTP 服务框架。webman 用于替代传统的 php-fpm 架构&#xff0c;提供超高性能可扩展的 HTTP 服务。你可以用 webman 开发网站&#xff0c;也可以开发 HTTP 接口或者微服务。 除此之外&#xff0c;webman 还支持自定义进程&am…

Django发送邮件

【图书介绍】《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 Django 5框架Web应用开发_夏天又到了的博客-CSDN博客 本文学习怎么使用Django发送邮件。 尽管使用Python的smtplib模块发送电子邮件…

vant 动态查询下拉菜单(可用)

动态查询item项 <van-form submit"onSubmit" ref"formRef"><Title title"企业信息" title-line title-size"19" class"ml-[18px] mb-[18px]"></Title><van-cell-group inset class"py-[18px]&quo…

【JavaSE基础】Java 基础知识

Java 转义字符 Java 常用的转义字符 在控制台&#xff0c;输入 tab 键&#xff0c;可以实现命令补全 转义字符含义作用\t制表符一个制表位&#xff0c;实现对齐的功能\n &#xff1a;换行符\n换行符一个换行符\r回车符一个回车键 System.out.println(“韩顺平教育\r 北京”);&…

pod基础和镜像拉取策略

目录 pod概念 pod的分类 1.基础容器 pause 2.初始化容器 init 实验&#xff1a;定义初始化容器 init容器的作用 实验&#xff1a;如何在容器内部进行挂载 镜像拉取策略 pod概念 pod是k8s里面的最小单位&#xff0c;pod也是最小化运行容器的资源对象。容器是基于pod在k…

黑马点评10——用户签到-BitMap数据结构

文章目录 BitMap用法签到功能签到统计 BitMap用法 其实数据库完全可以实现签到功能 但签到数据比较大&#xff0c;借鉴签到卡的思想 布隆过滤器也是使用BitMap实现的. 签到功能 因为是当前用户的当天&#xff0c;所以保存需要的年月日不需要参数&#xff0c;可以直接获取。…

matter中的Fabric(网络结构)

什么是Fabric&#xff1f; Fabric可以被理解为一组相互信任的设备和控制器&#xff0c;它们共享一个共同的信任域。这意味着在同一个Fabric中的设备和控制器之间可以进行安全的通信&#xff0c;而无需额外的身份验证或安全检查。每个Fabric有一个唯一的标识&#xff0c;确保Fab…

Android调整第三方库PickerView宽高--回忆录

一、效果 // 时间选择implementation com.contrarywind:Android-PickerView:4.1.9 多年前&#xff0c;使用到事件选择器&#xff0c;但是PickerView默认宽度使满屏的&#xff0c;不太符合业务需求&#xff0c;当时为此花了许多时间&#xff0c;最终找到了解决方案&#xff0c;…

使用 Milvus 和 Streamlit 搭建多模态产品推荐系统

我们可以使用 Milvus 搭建多模态 RAG 应用&#xff0c;用于产品推荐系统。用户只需简单上传一张图片并输入文字描述&#xff0c;Google 的 MagicLens 多模态 Embedding 模型就会将图像和文本编码成一个多模态向量。然后&#xff0c;使用这个向量从 Milvus 向量数据库中找到最相…

JVM——Java虚拟机内存初识(面经篇之JVM内存)

网上说的太详细了,真不利于我的初识和记忆&#xff0c; 例如&#xff1a;堆区的young&#xff0c; old&#xff0c;讲了一大堆&#xff0c;结果&#xff0c;我连这些区域是干什么的都不知道&#xff0c;存储什么的都不知道&#xff0c; 害得是我自己总结&#xff1a; 堆&#x…

JavaWeb【day08】--(MySQL-Mybatis入门)

数据库开发-MySQL 1. 多表查询 1.1 概述 1.1.1 数据准备 SQL脚本&#xff1a; #建议&#xff1a;创建新的数据库 create database db04; use db04; ​ -- 部门表 create table tb_dept (id int unsigned primary key auto_increment comment 主键ID,name v…

各类AI工具编程能力测试对比

各类AI工具编程能力对比 现在各类AI工具火爆&#xff0c;擅长各类问题解决&#xff0c;闲来无事&#xff0c;验证下各类AI工具的编程能力如何。问题&#xff1a;c 实现杨辉三角&#xff0c;并main函数测试 kimi 对话窗口输入问题&#xff0c;得到了c的完整程序&#xff1a; …

通过redis-operator 来部署 Redis Cluster 集群

安装 Redis Operator 首先&#xff0c;需要安装 redis-operator。可以通过 Helm 或直接应用 YAML 文件来安装。 使用 Helm 安装&#xff1a; helm repo add ot-helm https://ot-container-kit.github.io/helm-charts/ helm install redis-operator ot-helm/redis-operator --…