开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 23844|回复: 26
收起左侧

[已结束活动] 【作业活动】另类算法的设计[!惊人的丰厚奖励!]

 关闭 [复制链接]
结帖率:100% (2/2)
发表于 2013-1-15 23:22:14 | 显示全部楼层 |阅读模式   山西省太原市
请超版看到后将本帖移动到活动版块。。。本人的答案将在不久后附上供大家交流学习!
一位数的数组,列出不大于它每个成员的值的数字组成的文本。
你可以使用任何可行的方法来达到最终的目的,思路不限,
我们将根据你的程序源码的质量给予2-200精币不等的奖励!
问题详细举例说明:
例如数组为{2,3,1,7}时,文本第一个字符可为1或2,
第二个可为1或2或3,
第三个可为1,
第四个可为1、2、3、4、5、6或7
再如数组为{3,2,4,2,1}时,第一个字符可为1或2或3,
第二个可为1或2,
第三个可为1、2、3或4,
第四个可为1或2,
第五个可为1;
例如数组为{2,3,1,7}时,需要列出如下(共2*3*1*7=42)组文本:

1111 11121113 1114 1115 1116 1117

1211 12121213 1214 1215 1216 1217

1311 13121313 1314 1315 1316 1317

2111 21122113 2114 2115 2116 2117

2211 22122213 2214 2215 2216 2217

2311 23122313 2314 2315 2316 2317

又如数组为{3,2,4,2,1}时,需要列出如下(共3*2*4*2*1=48)组文本:

1111111121

1121111221 11311 11321 11411 11421

1211112121 12211 12221 12311 12321 12411 12421

2111121121

2121121221 21311 21321 21411 21421

2211122121 22211 22221 22311 22321 22411 22421

3111131121

3121131221 31311 31321 31411 31421

3211132121 32211 32221 32311 32321 32411 32421





点评

答案在20楼。   山西省晋中市  发表于 2013-1-19 09:49
额,因为复制的时候,导致文本格式丢失(缺少空格);在此解释一下: 上面那批42组文本为每4位一组,下面48组为5位一组。   山西省太原市  发表于 2013-1-16 00:08

评分

参与人数 1好评 +1 精币 +50 收起 理由
Cand + 1 + 50 奉上小小红包希望笑纳

查看全部评分

结帖率:100% (2/2)
 楼主| 发表于 2013-1-19 09:47:20 | 显示全部楼层   山西省晋中市
13楼的adslxyz同学已经使用递归轻松解决了本问题,
10楼的素顏同学也已经基本解决了本问题,大家可以去研究一下,
微凉同学的程序虽然也解决了问题,但因为有bug不建议大家使用。

另因为我原先的答案和13楼的类似,所以我将答案升级了一下供大家学习,
可以将任何文本进行重组生成新的文本串,上源码:

[e]
.版本 2
.支持库 shellEx

.程序集 窗口程序集1
.程序集变量 文本分组, 文本型, , "0"
.程序集变量 许可证, 文本型
.程序集变量 组数, 整数型, , "2"
.程序集变量 i, 整数型

.子程序 _按钮1_被单击
.局部变量 计次1, 整数型
.局部变量 长度分组, 整数型, , "0"

' //-- 初始化 ↓
清除数组 (文本分组)
清除数组 (长度分组)
' ↑ 初始化数组,防止累加
编辑框2.内容 = 取空白文本 (0)
' --\\


文本分组 = 分割文本 (删首尾空 (编辑框1.内容), “ ”, )
.计次循环首 (取数组成员数 (文本分组), 计次1)
加入成员 (长度分组, 取文本长度 (文本分组 [计次1])) ' 将各组文本的长度转换为一个数值数组以便进行操作
.计次循环尾 ()


' //--只为了在标题上显示进度 ↓
组数 = { 1, 0 }
.计次循环首 (取数组成员数 (长度分组), 计次1)
组数 [1] = 组数 [1] × 长度分组 [计次1]
.计次循环尾 ()
标题 = 到文本 (组数 [2]) + “ / ” + 到文本 (组数 [1])
' --\\

子程序_处理 (长度分组, &处理子程序)


.子程序 子程序_处理, , , 简化输入
.参数 长度分组, 整数型, 数组
.参数 回调程序, 子程序指针, , 请传入 回调处理子程序地址指针 ,参数:[文本型]以空格分隔的数值文本组合
.局部变量 动态参考数组, 整数型, , "0"

许可证 = 到文本 (取随机数 (0, 取启动时间 ())) ' 初始化标识,防止bug
子程序_递归X (长度分组, 取数组成员数 (长度分组), 取数组成员数 (长度分组), 动态参考数组, 回调程序, 许可证)

.子程序 子程序_递归X
.参数 分组数值, 整数型, 数组
.参数 余数, 整数型, , 请传入 分组数值 的数组成员数,程序内部使用
.参数 总数, 整数型, , 请传入 分组数值 的数组成员数,程序内部使用
.参数 动态参考数组, 整数型, 参考 数组, 请传入临时数组作为子程序内部数据交换使用,勿作它用
.参数 回调程序, 子程序指针, , 请传入 回调处理子程序地址指针 ,参数:[文本型]以空格分隔的数值文本组合
.参数 许可证1, 文本型, 参考, 请传入空文本型参数,防止多次点击后产生冲突bug
.参数 许可证2, 文本型, 可空, 程序内部使用,请留空
.参数 返回参考, 文本型, 参考 可空 数组, 暂未使用
.局部变量 计次, 整数型
.局部变量 计次2, 整数型
.局部变量 tmp, 文本型, , , 临时变量


.如果真 (余数 = 总数) ' 初始化本次许可证校验,防止多次点击后产生冲突bug
许可证2 = 许可证1
重定义数组 (动态参考数组, 假, 总数)
.如果真结束

.变量循环首 (1, 分组数值 [余数], 1, 计次)
动态参考数组 [余数] = 计次
.如果真 (许可证2 = 许可证1) ' 许可证核对正确进入
.如果 (余数 > 1) ' 标识-1>0 递归执行条件:
处理事件 () ' 循环内防止假死
子程序_递归X (分组数值, 余数 - 1, 总数, 动态参考数组, 回调程序, 许可证1, 许可证2)
.否则
.如果真 (余数 = 1) ' 代表递归结束,输出
tmp = 取空白文本 (0) ' 重新置空临时变量
.变量循环首 (1, 总数, 1, 计次2) ' 循环n次 n=取数组成员数(分组数值{初始})
tmp = tmp + “ ” + 到文本 (动态参考数组 [计次2]) ' 进行处理
处理事件 () ' 循环内防止假死
.变量循环尾 ()
.如果真 (许可证2 = 许可证1) ' 赌杀漏网之鱼 防止多次点击后产生冲突bug
执行子程序 (回调程序, 删首尾空 (tmp)) ' 回调结果,进行处理
.如果真结束

.如果真结束

.如果结束

.如果真结束

.变量循环尾 ()



.子程序 处理子程序
.参数 参数一, 文本型
.局部变量 结果分组, 文本型, , "0"
.局部变量 计次, 整数型
.局部变量 当前文本组, 文本型
.局部变量 当前位, 文本型
.局部变量 结果文本, 文本型

结果分组 = 分割文本 (参数一, “ ”, ) ' 得到的只是各个文本分组应取的位置
' 调试输出 (参数一, 参数二)
' 参数二 = 选择 (是否为空 (参数二), 取数组成员数 (文本分组), 参数二) ' 如果 参数二 未传递值,便在程序内部进行处理 本例程因使用回调函数 所以未使用
' 结果文本=取空白文本(0)
.计次循环首 (取数组成员数 (文本分组), 计次) ' 将各个文本分组上对应位置的文本分别取出
当前文本组 = 文本分组 [计次]
当前位 = 取文本中间 (当前文本组, 到整数 (结果分组 [计次]), 1)
结果文本 = 结果文本 + 当前位
处理事件 () ' 防止假死
.计次循环尾 ()
编辑框2.加入文本 (结果文本 + “ | ”)


' //--只为了在标题上显示进度 ↓
组数 [2] = 组数 [2] + 1
标题 = 到文本 (组数 [2]) + “ / ” + 到文本 (组数 [1])

.子程序 __启动窗口_将被销毁

结束 () ' 防止程序运行期间退出时的错误提示音


[/e]

点评

.e 源码文件在23楼   山西省晋中市  发表于 2013-1-19 17:33

评分

参与人数 1精币 +200 收起 理由
Cand + 200 奉上小小红包希望笑纳

查看全部评分

回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
发表于 2013-1-16 00:03:32 | 显示全部楼层   广东省珠海市
鲁凯啸
啸锐
我是坐沙发来的!
回复 支持 反对

使用道具 举报

结帖率:67% (16/24)
发表于 2013-1-16 00:17:59 | 显示全部楼层   广东省广州市
本帖最后由 微凉 于 2013-1-16 01:02 编辑

先回复再写源码
数组:42{“2317”,“1115”,“1116”,“2213”,“2215”,“2113”,“1312”,“1214”,“1315”,“1117”,“1213”,“1315”,“1213”,“1311”,“1113”,“1216”,“1117”,“1315”,“1316”,“1111”,“1213”,“1315”,“2313”,“2115”,“2117”,“2213”,“2111”,“2213”,“2212”,“2315”,“2117”,“2315”,“2111”,“2115”,“2313”,“2211”,“2313”,“2217”,“2313”,“1317”,“1112”,“1215”}
[e]
.版本 2
.支持库 spec
.局部变量 返回文本, 文本型, , "0"
列出不大于它每个成员的值的数字组成的文本 ({ 2, 3, 1, 7 }, 返回文本)
调试输出 (返回文本)
.子程序 列出不大于它每个成员的值的数字组成的文本
.参数 int_Array, 整数型, 数组, 待生成数组的数
.参数 String_Array, 文本型, 参考 数组, 返回的结果文本
.局部变量 i, 整数型
.局部变量 length, 整数型
length = 1
.计次循环首 (取数组成员数 (int_Array), i)
    length = length × int_Array
.计次循环尾 ()
重定义数组 (String_Array, 假, 0)
.计次循环首 (length, i)
    加入成员 (String_Array, 生成文本 (int_Array, String_Array))
.计次循环尾 ()
.子程序 生成文本, 文本型
.参数 int_Array, 整数型, 数组, 用于生成的数组
.参数 String_Array, 文本型, 数组, 用于判断是否重复文本
.局部变量 j, 整数型
.局部变量 k, 整数型
.局部变量 length, 整数型
.局部变量 String, 文本型
length = 取数组成员数 (int_Array)
.计次循环首 (length, j)
    String = String + 到文本 (取随机数 (1, int_Array [j]))
    .如果真 (取文本长度 (String) = length)
        .计次循环首 (取数组成员数 (String_Array), k)
            .如果真 (String_Array [k] = String)
                生成文本 (int_Array, String_Array)
            .如果真结束
        .计次循环尾 ()
        置随机数种子 ()
        跳出循环 ()
    .如果真结束
.计次循环尾 ()
返回 (String)
[/e]
回复 支持 反对

使用道具 举报

发表于 2013-1-16 00:28:03 | 显示全部楼层   四川省成都市
用c语言可以吧
回复 支持 反对

使用道具 举报

发表于 2013-1-16 00:28:41 | 显示全部楼层   四川省成都市
用c语言可以吧
回复 支持 反对

使用道具 举报

发表于 2013-1-16 00:29:15 | 显示全部楼层   四川省成都市
我可以用c语言写吗?

点评

可以的 但是需要把备注写详细。。。   山西省太原市  发表于 2013-1-16 01:47
回复 支持 反对

使用道具 举报

结帖率:67% (16/24)
发表于 2013-1-16 01:32:07 | 显示全部楼层   广东省广州市
以下代码为不使用随机数的。{:soso_e113:}
' 数组:42{“2317”,“2316”,“2315”,“2314”,“2313”,“2312”,“2311”,“2310”,“2309”,“2308”,“2307”,“2306”,“2305”,“2304”,“2303”,“2302”,“2301”,“2300”,“2299”,“2298”,“2297”,“2296”,“2295”,“2294”,“2293”,“2292”,“2291”,“2290”,“2289”,“2288”,“2287”,“2286”,“2285”,“2284”,“2283”,“2282”,“2281”,“2280”,“2279”,“2278”,“2277”,“2276”}

[e]
.版本 2
.支持库 spec

.局部变量 返回文本, 文本型, , "0"

列出不大于它每个成员的值的数字组成的文本 ({ 2, 3, 1, 7 }, 返回文本)
调试输出 (返回文本)

.子程序 列出不大于它每个成员的值的数字组成的文本
.参数 int_Array, 整数型, 数组, 待生成数组的数
.参数 String_Array, 文本型, 参考 数组, 返回的结果文本
.局部变量 i, 整数型
.局部变量 length, 整数型
.局部变量 Max_int, 整数型
.局部变量 String, 文本型

length = 1
.计次循环首 (取数组成员数 (int_Array), i)
length = length × int_Array
.计次循环尾 ()
.计次循环首 (取数组成员数 (int_Array), i)
String = String + 到文本 (int_Array )
.计次循环尾 ()
Max_int = 到数值 (String)
重定义数组 (String_Array, 假, 0)
.变量循环首 (Max_int, Max_int - length + 1, -1, i)
加入成员 (String_Array, 到文本 (i))
.变量循环尾 ()


[/e]

点评

奖励20精币已发放,请查收!   山西省晋中市  发表于 2013-1-19 10:11
这样貌似有问题。。。   福建省泉州市  发表于 2013-1-17 16:25
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)
 楼主| 发表于 2013-1-16 01:46:33 | 显示全部楼层   山西省太原市
JChuaix 发表于 2013-1-16 00:28
用c语言可以吧

可以的  但是需要把备注写详细。。。
回复 支持 反对

使用道具 举报

结帖率:61% (35/57)
发表于 2013-1-16 06:59:33 | 显示全部楼层   海南省乐东黎族自治县
什么情况。。。
回复 支持 反对

使用道具 举报

结帖率:100% (12/12)
发表于 2013-1-16 19:36:52 | 显示全部楼层   福建省厦门市
本帖最后由 素顏じ亦傾城ジ 于 2013-1-16 19:39 编辑

[e]
.版本 2
.支持库 spec

.程序集 窗口程序集1

.子程序 逐字分割, 整数型, , 返回字数
.参数 分割的内容, 文本型, , 要逐字分割的文本
.参数 返回的文本数组, 文本型, 数组, 返回的文本数组
.局部变量 n, 整数型
.局部变量 代码, 整数型
.局部变量 临时, 文本型

n = 1
清除数组 (返回的文本数组)
.判断循环首 (n ≤ 取文本长度 (分割的内容))
    临时 = 取文本中间 (分割的内容, n, 1)
    .如果真 (取代码 (临时, ) < 0)
        临时 = 取文本中间 (分割的内容, n, 2)
        n = n + 1
    .如果真结束
    加入成员 (返回的文本数组, 临时)
    n = n + 1
.判断循环尾 ()
返回 (取数组成员数 (返回的文本数组))

.子程序 生成字符串, 文本型
.参数 数字大小, 整数型
.参数 生成总数, 整数型
.参数 倍数, 整数型
.局部变量 计次, 整数型
.局部变量 数字, 整数型
.局部变量 返回字符串, 文本型

数字 = 1
.计次循环首 (生成总数, )
    计次 = 计次 + 1
    .如果真 (计次 = 倍数 + 1)
        数字 = 数字 + 1
        计次 = 1
    .如果真结束
    .如果真 (数字 = 数字大小 + 1)
        数字 = 1
    .如果真结束
    返回字符串 = 返回字符串 + 到文本 (数字)

.计次循环尾 ()
返回 (返回字符串)

.子程序 生成数组, 整数型, 公开, 返回生成个数
.参数 文本, 文本型
.参数 返回的数组, 文本型, 数组
.局部变量 I, 整数型, , , 计次用 1
.局部变量 II, 整数型, , , 计次用 2
.局部变量 A, 文本型, , "0", 临时数组1
.局部变量 总次数, 整数型
.局部变量 临时文本, 文本型

逐字分割 (文本, A)
总次数 = 1
.计次循环首 (取数组成员数 (A), I)
    总次数 = 总次数 × 到整数 (A [I])
.计次循环尾 ()
II = 总次数
.计次循环首 (取数组成员数 (A), I)
    II = II \ 到整数 (A [I])
    临时文本 = 临时文本 + 生成字符串 (到整数 (A [I]), 总次数, II)
.计次循环尾 ()
逐字分割 (临时文本, A)
重定义数组 (返回的数组, 假, 总次数)
.计次循环首 (总次数, I)
    .计次循环首 (取文本长度 (文本), II)
        返回的数组 [I] = 返回的数组 [I] + A [总次数 × II - 总次数 + I]
    .计次循环尾 ()
.计次循环尾 ()
返回 (取数组成员数 (返回的数组))

.子程序 _按钮1_被单击
.局部变量 数组, 文本型, , "0"

调试输出 (生成数组 (编辑框1.内容, 数组))    '如数组为{3,2,4,2,1}时,只要在编辑框里面输入  32421   就可以了
调试输出 (数组)
[/e]

点评

奖励88精币已发放,请查收!   山西省晋中市  发表于 2013-1-19 10:14
测试数组 {3,2,4,2,1} 运行结果 数组:48{“11111”,“11121”,“11211”,“11221”,“11311”,“11321”,“11411”,“11421”,“12111”,“12121”,“12211”,“12221”,“12311”,“12321”,“12411”,“12421   福建省厦门市  详情 回复 发表于 2013-1-16 19:42
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表