开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

楼主: 鲁凯啸
收起左侧

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

 关闭 [复制链接]
结帖率:100% (12/12)
发表于 2013-1-16 19:42:36 | 显示全部楼层   福建省厦门市
素顏じ亦傾城ジ 发表于 2013-1-16 19:36
[e]
.版本 2
.支持库 spec

测试数组  {3,2,4,2,1}

运行结果
数组:48{“11111”,“11121”,“11211”,“11221”,“11311”,“11321”,“11411”,“11421”,“12111”,“12121”,“12211”,“12221”,“12311”,“12321”,“12411”,“12421”,“21111”,“21121”,“21211”,“21221”,“21311”,“21321”,“21411”,“21421”,“22111”,“22121”,“22211”,“22221”,“22311”,“22321”,“22411”,“22421”,“31111”,“31121”,“31211”,“31221”,“31311”,“31321”,“31411”,“31421”,“32111”,“32121”,“32211”,“32221”,“32311”,“32321”,“32411”,“32421”}
回复 支持 反对

使用道具 举报

结帖率:100% (32/32)
发表于 2013-1-16 19:46:53 | 显示全部楼层   广东省佛山市
一个字:晕
回复 支持 反对

使用道具 举报

发表于 2013-1-16 21:16:53 | 显示全部楼层   福建省泉州市
[e]
.版本 2
.支持库 spec

.程序集 程序集1
.程序集变量 g_num, 整数型

.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
.局部变量 a, 整数型, , "0"
.局部变量 n, 整数型
.局部变量 result, 整数型, , "5",  动态更新数组值

置随机数种子 (取启动时间 ())
n = 4
.计次循环首 (n, )
    加入成员 (a, 取随机数 (1, 9))
.计次循环尾 ()
enum_recurrence (a, n, result, n)
调试输出 (“总共有”, g_num, “个结果”)
返回 (0)  ' 可以根据您的需要返回任意数值

.子程序 enum_recurrence
.参数 value, 整数型, 数组
.参数 index, 整数型
.参数 result, 整数型, 参考 数组
.参数 n, 整数型
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 tmp, 文本型

.变量循环首 (1, value [index], 1, i)
    result [index] = i
    .如果真 (index - 1 > 0)
        ' 递归执行条件
        enum_recurrence (value, index - 1, result, n)
    .如果真结束
    .如果真 (index = 1)
        ' 递归到尽头, 说明本次枚举结束, 输出
        tmp = 取空白文本 (0)
        .变量循环首 (1, n, 1, j)
            tmp = tmp + 到文本 (result [j])
        .变量循环尾 ()
        输出调试文本 (tmp)
        ' 记录总数
        g_num = g_num + 1
    .如果真结束

.变量循环尾 ()
[/e]
递归算法.zip (1.34 KB, 下载次数: 0)

点评

正确回答获得的188精币奖励已发放,请查收!   山西省晋中市  发表于 2013-1-19 10:17

评分

参与人数 1好评 +1 精币 +2 收起 理由
鲁凯啸 + 1 + 2 感谢你的支持,精易有你更精彩!

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2013-1-16 22:53:17 | 显示全部楼层   四川省成都市
  1. #include<stdio.h>
  2. int main(void){
  3. int arr[]={3,2,4,2,1};//只能处理5个元素的数组
  4. int i1,i2,i3,i4,i5;//5个计数变量;五重循环
  5. int i=0;//存放总共循环次数结果

  6. //i1~i5 = 1 //初始化循环计数变量
  7. i1=1;
  8. while(i1<=arr[0]){
  9.         i2=1;
  10.         while(i2<=arr[1]){
  11.                 i3=1;
  12.                 while(i3<=arr[2]){
  13.                         i4=1;
  14.                         while(i4<=arr[3]){
  15.                                 i5=1;
  16.                                 while(i5<=arr[4]){
  17.                                         printf("%d%d%d%d\t",i1,i2,i3,i4,i5);//输出一种可能
  18.                                         ++i5;
  19.                                         ++i;//总共循环次数,每次+1 从0开始
  20.                                 }
  21.                                 ++i4;
  22.                         }
  23.                         ++i3;
  24.                 }
  25.                 printf("\n");
  26.                 ++i2;
  27.         }
  28.         ++i1;
  29. }
  30. printf("共有%d种可能\n",i);
  31. return 0;
  32. }
复制代码
我太笨了,这个我只能弄成死的数组,不能根据数组大小来运行
想知道怎么可以 不管多长的数组 都能运行啊,
还有我真的是不会注释
菜鸟一枚,希望不要喷我!

点评

共奖励10精币,感谢你的支持!   山西省晋中市  发表于 2013-1-19 10:21

评分

参与人数 1精币 +2 收起 理由
鲁凯啸 + 2 回复内容认真红包鼓励

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2013-1-16 22:57:16 | 显示全部楼层   四川省成都市
忘了传图片,我不知道怎么把他们弄成文本

点评

我好笨啊   四川省成都市  详情 回复 发表于 2013-1-16 23:07
[/img]   四川省成都市  详情 回复 发表于 2013-1-16 23:06

评分

参与人数 1精币 +2 收起 理由
鲁凯啸 + 2 回复内容认真红包鼓励

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2013-1-16 23:06:28 | 显示全部楼层   四川省成都市
JChuaix 发表于 2013-1-16 22:57
忘了传图片,我不知道怎么把他们弄成文本

[img]刚发的图片挂了 再来一张%5Bimg=560,200%5Dhttp://bbs.125.la/data/attachmen ... 427io.jpg.thumb.jpg[/img][/img]

评分

参与人数 1精币 +2 收起 理由
鲁凯啸 + 2 感谢你的支持,认真回复,共奖励10精币

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2013-1-16 23:07:22 | 显示全部楼层   四川省成都市
JChuaix 发表于 2013-1-16 22:57
忘了传图片,我不知道怎么把他们弄成文本

我好笨啊

点评

我原来学过易语言,电脑上没有装易语言,所以就用c语言写了   四川省成都市  详情 回复 发表于 2013-1-17 12:17
要学C的话 可以去看看郝斌的C语言教学视频   北京市北京市  发表于 2013-1-17 08:55

评分

参与人数 1精币 +2 收起 理由
鲁凯啸 + 2 感谢你的支持,精易有你更精彩

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2013-1-17 12:17:42 | 显示全部楼层   四川省成都市
JChuaix 发表于 2013-1-16 23:07
我好笨啊

我原来学过易语言,电脑上没有装易语言,所以就用c语言写了

评分

参与人数 1精币 +2 收起 理由
鲁凯啸 + 2 奉上小小红包希望笑纳

查看全部评分

回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2013-1-18 19:54:18 | 显示全部楼层   河南省商丘市
呵呵我有点看不懂打击饿
回复 支持 反对

使用道具 举报

结帖率: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 奉上小小红包希望笑纳

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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