算法求助

hokersome 2002-07-07 11:06:46
有这样一个游戏:
给定一个任意数列,比如236751498,每次选定n,使前n个数翻转.例n=5,则576321498.依此类推,直至有序123456789.
各位能不能帮助设计一个算法?
...全文
54 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
atlantis13579 2002-07-08
  • 打赏
  • 举报
回复
管理-->分配分-->密码-->给分
hokersome 2002-07-08
  • 打赏
  • 举报
回复
如何给分?
hokersome 2002-07-08
  • 打赏
  • 举报
回复
atlantis13579(更深的蓝)(_L_) 和leopro(六月飞雪) 的算法确实可行(是一样的)
leopro 2002-07-08
  • 打赏
  • 举报
回复
更正,上面应为
while(L>1)
{
找出最大数的位置n;
if(n!=L)
{
前n个数翻转;
前L个数翻转;//这样最大数已经到了末尾;
}
L=L-1;
}
leopro 2002-07-08
  • 打赏
  • 举报
回复
给你一个实用的解法,但不是最优
长度L,

while(L>0)
{
找出最大数的位置n;
前n个数翻转;
前L个数翻转,这样最大数已经到了末尾;
L=L-1;
}
atlantis13579 2002-07-07
  • 打赏
  • 举报
回复
上面改一改

3.若m=2,exit
atlantis13579 2002-07-07
  • 打赏
  • 举报
回复
比如236751498

r(8) -->941576328
r(9) -->823675149
r(1) -->823675149
r(8) -->415763289
r(4) -->751463289
r(7) -->236415789
r(3) -->632415789
r(6) -->514236789
r(1) -->514236789
r(5) -->324156789
r(3) -->423156789
r(4) -->132456789
r(2) -->312456789
r(3) -->213456789
r(1) -->213456789
r(2) -->123456789
LeeMaRS 2002-07-07
  • 打赏
  • 举报
回复
可以用广度优先搜索每次从n=1到n=9生做,再加上一些启发函数,应该就可以了.
hokersome 2002-07-07
  • 打赏
  • 举报
回复
怎么样使这个数列从无序翻转到有序
atlantis13579 2002-07-07
  • 打赏
  • 举报
回复
记使前k个数翻转为操作r(k)

设数列长度为L,

1.m=L,它的位置为n

2.r(n);r(m);

3.若m=1,exit

4.m=m-1,它的位置为n;goto 2
LeeMaRS 2002-07-07
  • 打赏
  • 举报
回复
你是要什么算法?

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧