免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: luyi1983
打印 上一主题 下一主题

求助一段shell [复制链接]

论坛徽章:
0
21 [报告]
发表于 2008-12-31 18:45 |只看该作者
类型1大老虎A B C
类型2小老虎a b c
转换大小写相等并且类型相同才正确,提供种思路,让高手写吧。俺菜,不会写。

论坛徽章:
0
22 [报告]
发表于 2008-12-31 19:53 |只看该作者
方法应该有很多种。。。
想想。

论坛徽章:
0
23 [报告]
发表于 2009-01-01 21:26 |只看该作者
我很赞同!

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
24 [报告]
发表于 2009-01-01 22:27 |只看该作者
占位,听说偶还有机会拿到这一帖的赏分

论坛徽章:
0
25 [报告]
发表于 2009-01-01 22:55 |只看该作者
有些地方可能不对,抛砖引玉

把 东西两岸 写为 此岸,彼岸
渡船中,此岸 最短渡船序列为:
>>>最短渡船序列证明见 30 楼<<<

  1. //相似的不再列出
  2. //其中,A、B、C代表母老虎,1、2、3代表小老虎)
  3. //程序中4、5、6代表母老虎,1、2、3代表小老虎)   //上下一一对应

  4. 序列>
  5. 00:  ABC123
  6. 01:  BC23
  7. 02:  ABC23
  8. 03:  ABC
  9. 04:  ABC1
  10. 05:  A1
  11. 06:  AB12
  12. 07:  12
  13. 08:  123
  14. 09:  1
  15. 10:  12
复制代码

每次组合变化数序列:

  1. 00:  -2
  2. 01:   1
  3. 02:  -2
  4. 03:   1
  5. 04:  -2
  6. 05:  +2
  7. 06:  -2
  8. 07:   1
  9. 08:  -2
  10. 09:   1
  11. 10:  -2
复制代码

可见每次变化的规律:此岸组合交替 减2/加1 个元素 (除 05 步加 2,即组合中只有一对母子老虎是加 2)

算法:

>>>主函数<<<:

  1. i = 0            //全局变量:渡船方法数
  2. set = "456123"   //最初组合

  3. 递归函数(set)

  4. print  i      //打印渡船方法总数
复制代码

>>>递归函数<<<
(
当组合元素个数为 0 时,渡船方法数自加 1(计数),返回;
当组合为安全组合时,调用递归函数;
当组合为非安全组合时,不计数,返回;
)

  1. //彼岸和此岸互为补集
  2. f = 0   //变量(标志渡船来回)  0: 渡向彼岸 1:渡向此岸
  3. set     //递归函数形参

  4. while(组合元素个数不为0)
  5. do
  6.       if(f == 0)                                      //渡向彼岸,减去两个元素
  7.                for T1, T2 in set
  8.                       fun(set, T1, T2, 0)             //见下定义
  9.                       f = 1
  10.       else                                            //f == 1  渡向此岸,加上一个元素(有特殊情况:组合中只有一对母子老虎加两个元素)

  11.                 if(组合中只有一对母子老虎)
  12.                        for T1, T2 in mod(set)         //set 的补集
  13.                                   fun(set, T1, T2, 1) //见下定义
  14.                                   f = 0
  15.                 else
  16.                        for T in mod(set)              //set 的补集
  17.                                    add(set, T)        //与 fun 函数类似,见下定义
  18.                                    f = 0
  19. done

  20. def fun(set, T1, T2, f)
  21.         // when add2 or dev2
  22.         // f 为局部标志  0:dev 2 elements,  1:add 2 elements
  23.         if(f == 0)
  24.                    从组合中减去 T1,T2
  25.         else              // f == 1
  26.                   在组合中加上 T1,T2
  27.       if(组合长度为0)
  28.                 i++
  29.                 return
  30.         if(此岸非安全组合 || 彼岸非安全组合)                  // call 安检函数    (见下)
  31.             return
  32.        else                                         //安全组合
  33.                 call  递归函数(set)

  34. def add(set, T)
  35.          //when add1
  36.          if(此岸非安全组合 || 彼岸非安全组合)                 // call 安检函数    (见下)
  37.             return
  38.        else                                         //安全组合
  39.                 call  递归函数(set)
复制代码

>>>安检函数<<<
(检测组合是否为安全组合

如果有一个子老虎且没有其对应的母老虎,但有其他母老虎
则为非安全组合
)

  1. d = 0  //标志变量 0:表示 无 母子老虎   n(>0):表示 母子老虎对数  
  2. T      //临时变量

  3. while (组合长度 != 0)
  4. do
  5.    if(组合元素 有 母子老虎对)  //优先 删除 母子老虎对
  6.         d++
  7.              从组合中 删除 母子老虎对
  8.     elif(组合中都为母老虎)
  9.               return "安全组合"
  10.        elif(组合中都为子老虎 && d == 0)
  11.               return "安全组合"
  12.       else
  13.               return "非安全组合"
  14. done
复制代码

[ 本帖最后由 爱知 于 2009-1-2 14:46 编辑 ]

论坛徽章:
0
26 [报告]
发表于 2009-01-02 09:54 |只看该作者
期待啊,,,
谢谢各位

看着爱知的improve思路

[ 本帖最后由 luyi1983 于 2009-1-2 11:51 编辑 ]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
27 [报告]
发表于 2009-01-02 12:28 |只看该作者
原帖由 爱知 于 2009-1-1 22:55 发表
00:  -2
01:   1
02:  -2
03:   1
04:  -2
05:  +2
06:  -2
07:   1
08:  -2
09:   1
10:  -2


怎样才能证明这个是最短的呢?

不知道楼主是想写程序证明这个是最短的,还是在已知这个是最短的情况下列出所有的可能?

论坛徽章:
0
28 [报告]
发表于 2009-01-02 12:34 |只看该作者
tim
我只希望能看到用程序解出答案
程序能告诉我 怎么渡河 可以成功
并且 可以列出可能的方法

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
29 [报告]
发表于 2009-01-02 12:45 |只看该作者
原帖由 luyi1983 于 2009-1-2 12:34 发表
可以列出可能的方法


这个范围太广了,比如只有A老虎过去,然后自己又划回来,这样就做了一次无用功,在任何一种方法里添加这样一次,都可以成为另一种方法,因此,还是要列出最短的所有情况。

论坛徽章:
0
30 [报告]
发表于 2009-01-02 12:51 |只看该作者
嗯 同意 无意义的 肯定不要
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP