算法 数据结构 图论-问一个算法问题,将一个数变为另一个数的最少步骤

问题描述

问一个算法问题,将一个数变为另一个数的最少步骤

“上上下下左右左右 BABA”中,上用↑表示,下用↓表示,左用←表示,右用→表示,A,
B。先定义一个输入区,模拟 6 位数的输入,输入区有六个位置为(从左到右)第 1 位,第
2 位,第 3 位,第 4 位,第 5 位,第 6 位。有一个指针指向当前操作位置,称其为指针,手
柄上的六个按键分别执行以下操作:
↑:按↑,指针所指向的位置不变,将指针指向位置的数字加 1 (除非它是 9)。例如,如果
指针指向的数字为 6,按↑之后,该数字变为 7;如果该数字是 9,则按↑之后,数字以及
指针位置都不变;
↓:按↓,指针所指向的位置不变,将指针指向位置的数字减 1 (除非它是 0),如果该处数
字为 0,则按↓之后,数字不变,指针所指位置也不变;
←:按←,指针向左移一个位置,如果指针已经指向输入区的第 1 位,则指针位置不变化;
→: 按→, 指针向右移一个位置,如果指针已经指向输入区的第 6 位, 则指针位置也无变化。
A:按 A,指针所指位置不变,输入区第 1 位的数字会和指针所指位置的数字交换。如果指
针指向的是第 1 位,则按 A 键之后,输入区无变化;
B:按 B,指针所指位置不变,输入区第 6 位的数字会和指针所指向的数字与交换。如果指
针指向的是第 6 位数字,则按 B 键之后,输入区无变化;
因为不能直接输入数字, 为了能够达到输入数字的目的, 每次输入目标数字之前, 输入区总
会先随机生成一个 6 位数字,而且指针固定指向第 1 位。当灵活运用手柄上的这六个键, 就
可以得到目标数字,完成输入,最终允许指针指向任何位置。
可以看出,使用这种方案,输入同一个目标数字可能有不种操作方式(按键次数不一) ,但
是存在一种输入方案, 使得需要按键次数最少。 现在请你编写一个程序,求出输入一个目标
数字需要的最少按键次数是多少。

比如说

123456变为654321的最少步骤如下:
B 623451
→ 623451
A 263451
↓ 253451
→ 253451
↑ 254451
→ 254451
↓ 254351
→ 254351
↑ 254361
A 654321
最少按键次数为 11 次

时间: 2024-12-30 21:53:01

算法 数据结构 图论-问一个算法问题,将一个数变为另一个数的最少步骤的相关文章

算法 数据结构 图论-有一个算法问题,与图论有关

问题描述 有一个算法问题,与图论有关 给定一个有向无环权重图G(V,E),V的一个子集为V',从给定的点s出发到给定的点t,找出一条能遍历V'的最短路径,已知权重为1到20的整数. 解决方案 求思路啊! 解决方案二: 昨天刚和问答的一个朋友讨论过 有一带权重的有向图,给定起点B,终点E,以及n个必须经过的点,通过编程算出权重最小的点. 他的问题是np.... 但是你的貌似不是,因为你的G确定不包含环, 这是我写的算法,用dfs遍历所有s到t的路径,选出路过v'的比较, 还有一个算法,用floyd

相似度-问一个求两组数相似程度的比较方法

问题描述 问一个求两组数相似程度的比较方法 如题,这两组数据的对应位置无关,属于统计学的范畴.譬如说,A.B两组数据中,A组数据符合正态分布,那么求B组数据属于A组数据的可能性?这个应该用什么方法呢? 解决方案 尤其是对于正态分布这种你已经知道某一组数据分布的情况下,贝叶斯很适合 解决方案二: 如果两个数组一样长的话,可以把两个数组都看成是多维向量,求两个向量间的夹角就好了,夹角越小越相似cos_theta=a*b/|a}*|b| 解决方案三: 请问具体是怎么实现的?譬如a=[1,2,4,7,1

算法 数据结构 图论-如何求一个连通图的具有最小权值的生成子图!

问题描述 如何求一个连通图的具有最小权值的生成子图! 如何求一个连通图的具有最小权值的生成子图!算法如何?不通要过穷举,如何进行选边?有没有好算法!

算法 数据结构 java-求解一个简单的算法问题

问题描述 求解一个简单的算法问题 Generate a 4x4 room and randomly place the dirt in some of the grids. The agent starts at the grid 1 and tries to complete cleaning the dirt in the room. 16 15 14 13 09 10 11 12 08 07 06 05 01 02 03 04 e.g. The room of id 02,08,09,11

浅谈算法和数据结构 二 基本排序算法

本篇开始学习排序算法.排序与我们日常生活中息息相关,比如,我们要从电话簿中找到某个联系人首先会按照姓氏排序.买火车票会按照出发时间或者时长排序.买东西会按照销量或者好评度排序.查找文件会按照修改时间排序等等.在计算机程序设计中,排序和查找也是最基本的算法,很多其他的算法都是以排序算法为基础,在一般的数据处理或分析中,通常第一步就是进行排序,比如说二分查找,首先要对数据进行排序.在Donald Knuth 的计算机程序设计的艺术这四卷书中,有一卷是专门介绍排序和查找的. 排序的算法有很多,在维基百

从零开始_学_数据结构(一)——算法的基本概念

从零开始_学_数据结构(一)--算法   算法的定义: 解决问题的方法. 对于同一个问题,一个好的算法比一个差的算法,效率更高,更节约资源.   For Computer:算法是解决特定问题的求解步骤的描述,在计算机中,表示指令的有限序列,每条指令表示一个或者多个操作. 简单来说,算法就是输入代码,告诉计算机,你应该怎么解决这个问题.     算法的特性: (1)输入和输出.        光算出结果但不输出结果,跟没算没区别:要计算,总得有数据,不然没法计算. (2)有穷性:        能

分布式系统中的RPC请求经常出现乱序的情况 写一个算法来将一个乱序的序列保序输出

分布式系统中的RPC请求经常出现乱序的情况.  写一个算法来将一个乱序的序列保序输出.例如,假设起始序号是1,对于(1, 2, 5, 8, 10, 4, 3, 6, 9, 7)这个序列,输出是:  1  2  3, 4, 5  6  7, 8, 9, 10 上述例子中,3到来的时候会发现4,5已经在了.因此将已经满足顺序的整个序列(3, 4, 5)输出为一行. 要求:  1. 写一个高效的算法完成上述功能,实现要尽可能的健壮.易于维护  2. 为该算法设计并实现单元测试 我的思路是:  假设输入

想问朋友面试中遇到的一个算法题:

问题描述 想问朋友面试中遇到的一个算法题: Write a program in Java to assess a given string whether it complies with following patterns. Return true if a given string complies with these patterns else false. N = N1 + N2 N>= N1 >= N2 where N is the Nth element in the str

数据结构算法设计: 请设计一个算法,统计一个循环单链表L中的结点个数。

问题描述 数据结构算法设计: 请设计一个算法,统计一个循环单链表L中的结点个数. 算法设计: 请设计一个算法,统计一个循环单链表L中的结点个数. 解决方案 int n = 0; while (L != NULL) { L = L->next; n++; } 解决方案二: /* counts the nodes in the list / int fuc(struct list head) { void *tmp; int i; if(!head) return -1; for(i = 1, tm