【程序段位】★【倔强青铜】★ 程序编程题

2023-11-22 14:10

本文主要是介绍【程序段位】★【倔强青铜】★ 程序编程题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Q1:倔强青铜

尝试用编程解决问题

 

难度系数:★

优秀的扫地机器人

(IQ:80    目标时间:20分钟)

现在有很多制造商都在卖扫地机器人,它非常有用,能为忙碌的我们分担家务负担。不过我们也很难理解为什么扫地机器人有时候会反复清扫某一个地方。

假设有一款不会反复清扫同一个地方的机器人,它只能前后左右移动。举个例子,如果第1 次向后移动,那么连续移动3 次时,就会有以下9 种情况(如图 )。又因为第1 次移动可以是前后左右4 种情况,所以移动3 次时全部路径有9×4 = 36 种。

※ 最初的位置用0 表示,其后的移动位置用数字表示。

20184113_wZCZ.jpg

(移动路径事例)

问题:求这个机器人移动12 次时,有多少种移动路径?

(ps:最初三次的移动方向很自由,从第四次开始,坐标有些方向就不能移动啦)

 

 

尝试了写了一个代码:

<?php/*** 【问题】** 举个例子,如果第1 次向后移动,那么连续移动3 次时,就会有以下9 种情况(如图 )。* 又因为第1 次移动可以是前后左右4 种情况,所以移动3 次时全部路径有9×4 = 36 种。** eg: 问机器人移动12次,有多少种方式?**//*** 【分析】** 坐标分析法 初始 [0, 0]* 前后左右方向计算方式:*      $way_list = [1, 2, 3, 4];*      前[1] y-1  后[2] y+1  左[3] x-1  右[4] x+1** 走动的路径点坐标 如果存在则跳过,否则可以移动**/$now = ['x' => 0, 'y' => 0];
$result_list = [['0,0']];$limit = empty($argv[1]) ? 12 : intval($argv[1]); // 需要移动的次数 默认 12
$a =_get_way($result_list, $limit);
var_dump($limit . " count: " . count($a[$limit]));/*** 获取每一步移动的路径选择* @param $result_list* @param $limit* @return string*/
function _get_way($result_list, $limit){for($i = 1; $i <= $limit; $i++){$way_list = [1, 2, 3, 4];foreach ($result_list[$i - 1] as $key => $v) {foreach ($way_list as $vv) {$result_list = _check_way($result_list, $v, $vv, $i, $key);}}}return $result_list;
}/*** 检查下一个点 是否可以移动* @param $result_list* @param $now* @param $way* @param $limit* @param $key* @return string*/
function _check_way($result_list, $now, $way, $limit, $key){$now_list = _get_last_point($now);$x = $now_list[0];$y = $now_list[1];switch ($way) {case 1:$y -= 1;break;case 2:$y += 1;break;case 3:$x -= 1;break;case 4:$x += 1;break;default:break;}$re = $x . "," . $y;if(!_check_point($re, $result_list[$limit - 1][$key])){$result_list[$limit][] = $now . ';' . $re;}return $result_list;
}function _get_last_point($point_str){$list = explode(";", $point_str);$last_point = $list[count($list) -1];$last_point_list = explode(',', $last_point);return $last_point_list;
}function _check_point($str, $long_str){$list = explode(";", $long_str);if(in_array($str, $list)) {return true;}return false;
}

 

 

执行结果如下:

[vagrant@vagrant catchData]$ php getLevel.php 1
/opt/htdocs/test/catchData/getLevel.php:30:
string(10) "1 count: 4"
[vagrant@vagrant catchData]$ php getLevel.php 2
/opt/htdocs/test/catchData/getLevel.php:30:
string(11) "2 count: 12"
[vagrant@vagrant catchData]$ php getLevel.php 3
/opt/htdocs/test/catchData/getLevel.php:30:
string(11) "3 count: 36"
[vagrant@vagrant catchData]$ php getLevel.php 4
/opt/htdocs/test/catchData/getLevel.php:30:
string(12) "4 count: 100"
[vagrant@vagrant catchData]$ php getLevel.php 5
/opt/htdocs/test/catchData/getLevel.php:30:
string(12) "5 count: 284"
[vagrant@vagrant catchData]$ php getLevel.php 6
/opt/htdocs/test/catchData/getLevel.php:30:
string(12) "6 count: 780"
[vagrant@vagrant catchData]$ php getLevel.php 7
/opt/htdocs/test/catchData/getLevel.php:30:
string(13) "7 count: 2172"
[vagrant@vagrant catchData]$ php getLevel.php 8
/opt/htdocs/test/catchData/getLevel.php:30:
string(13) "8 count: 5916"
[vagrant@vagrant catchData]$ php getLevel.php 9
/opt/htdocs/test/catchData/getLevel.php:30:
string(14) "9 count: 16268"
[vagrant@vagrant catchData]$ php getLevel.php 10
/opt/htdocs/test/catchData/getLevel.php:30:
string(15) "10 count: 44100"
[vagrant@vagrant catchData]$ php getLevel.php 11
/opt/htdocs/test/catchData/getLevel.php:30:
string(16) "11 count: 120292"
[vagrant@vagrant catchData]$ php getLevel.php 12
string(16) "12 count: 324932"

 

 

 

转载于:https://my.oschina.net/tigerlovecat/blog/1576191

这篇关于【程序段位】★【倔强青铜】★ 程序编程题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/410692

相关文章

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用