| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2397 人关注过本帖
标题:有个问题想请教,可别笑话我呀
只看楼主 加入收藏
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
jys07, 我先用C++帮你写一个吧,答案会在C++教室板块贴出,到时候你到那里去看.

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-09-11 23:19
jys07
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2005-9-9
收藏
得分:0 
谢谢你
2005-09-12 15:45
jys07
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2005-9-9
收藏
得分:0 
象KNOCKER所说的也可以去掉3连号以上的就行,但结果不知道会怎么样,也可能是一个很大的集合
2005-09-12 15:47
jys07
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2005-9-9
收藏
得分:0 
KAI你好,是在这个地方吗? 编程论坛开发语言C++论坛『 C++教室 』 → 帖子列表
2005-09-12 15:51
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
没这么快,他得先写一个生成基础数据库(就是去全部的4272048 组 - 3连号以上的部分)的程序,写这个程序我估计Kai只需5分钟时间,但是运行这个程序并生成这个数据库,怕是要几天时间.............哈哈哈哈.....你别着急,MM

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-09-12 16:38
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
knocker, 我昨天写了, 对小数据量, 经测试正确, 比如4出3. 7出2等等. 这里请注意一下, 我的机器是很差很差的那种, 没事自己都会死机的那种. 昨天的程序没有用读文件的方式, 因为我想让我的机器试试看, 果然经不起考验, 当我尝试20出7的时候, 机器死机了. 昨天我还有学校的任务, 所以机器重新启动后, 我还是抓紧写我自己的程序了. 对于这个程序, 我会尽量让他高效的, 算法里还得推敲推敲, 我现在的算法, 不是上来就列出所有的可能组合, 而是让他逐层往上生成. 第一层当然是33出1了, 当然就那么33个数. 第二层是在第一层的基础上生成2个数, 依次类推直到第七层. 其实第一层是没有必要的, 因为这33个数本来就是已知的. 所以如果出7的话,就需要6层. 这就好比洗车子, 流水线操作啊. 如果对上面的解释还没有理解, 我举个简单的例子. 就说4出3吧, 第一层当然是 1 2 3 4 接下来, 1 2 3 4 这四个数排好队来到第二层等待处理, 先说一下, 我把每一个单项称为Item 到了第二层, 由 1 产生了 (1 2) (1 3) (1 4) 这三个Item 2 产生了 (2 3) (2 4) 3 产生了 (3 4) 4 不能产生新的Item 将这些Item 放到第三层 (1 2) 产生了 (1 2 3) (1 2 4) (1 3) 产生了 (1 3 4) (1 4) 不能产生新的Item (2 3) 产生了 (2 3 4) (2 4) 不能产生新的Item (3 4) 也不能产生新的Item 最后就只剩下4个Item : (1 2 3) (1 2 4) (1 3 4) (2 3 4) 至于如何判断是否可以产生Item, 还是不可以? 那就是我给Item 赋予了某种功能 他自己能知道是否能够和 1 到 33 中的数产生一个新的Item. 其中很关键的一步是在产生一个Item之后, 要将他放入 ResultVector中去, 这样就产生一个问题, 随着数目的增大,内存空间的占据量太大了, 而且那些Item 都是通过 new 生成的, 地址的杂乱无序, 也给程序的运行带来隐患, 如果你上面的那个数据4272048 没有错的话, 那么至少需要 114 M 的RAM 空间, 如果在加上 copy 的动作, 那就要228M的空间, 我总共才 192 的空间, 所以死机是必然的. 如果读文件, 将产生的Result 不放在 Ram 中而是放在 硬盘上的文件里, 那么死机是可以避免的, 但是速度就很慢很慢了, 真的有可能就要运行一两天了. 还有一个解决办法就是编码, 通过编码压缩数据, 然后通过解码解析数据, 这样的话,或许也行. 让我再想想.

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-09-13 03:35
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
为什么不使用数据库?比如SQL

我的建议如下:

1。先写一个生成基础数据库的程序。其功能是

A。产生所有符合条件(即无3连号以上的数组)的数组

B。这个程序得能中止并保存即时运行进度,并能随时从上次中止处继续运行。//注:生成这个库的时间肯定不会短,或者几十小时,或者几天,甚至是几十天.......我也没具体估算过需要多少时间,有这个功能,你就象断点续传一样,闲时随时运行一下,忙时可中断运行

C。得到这个{    [  4272048 组 ] 减去 [ 3连号以上数组 ]   }所需的基础数据库

//粗粗估算了一下,将会小了很多



2。然后,才写楼主所要的程序

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-09-13 10:04
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
[QUOTE]C。得到这个{    [  4272048 组 ] 减去 [ 3连号以上数组 ]   }所需的基础数据库

//粗粗估算了一下,将会小了很多
[/QUOTE]

算错了,只减少了 27405 组 对最后的结果没有实质性的意义,即最后还有

4272048  - 27405 = 4244643 组

如果一组数7个char来储存,则需 29,712,501个char 空间^_^

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-09-13 10:27
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
我有个新的想法, 非常有可能经筛选后得到的结果是很庞大的。这并不是楼主所希望的结果。 楼主所希望得的最后结果我想不会超过100组,否则就失去意义了。 基于上面的考虑: 先假定,筛选后得到的结果是很庞大的(如果不是,则这个方法是没意义的),楼主所希望得的最后结果不超过100组。 那么,是否可以随机产生一组数,再判定是否符合要求,直至得到100组.

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-09-13 10:49
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
jys07, 程序在C++教室板块贴出来了,下面是这个帖子的连接 符合你题意的解有31组, 如果用 6 4 来测试, 也就是6选4,所得结果为3组。 由于你的题目中的要求,出现相同的3个数便为非法,所以最后的结果就大大的减少了。 http://bbs.bc-cn.net/bbs/dispbbs.asp?boardID=56&ID=27580&page=1

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-09-14 00:36
快速回复:有个问题想请教,可别笑话我呀
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016835 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved