我不会了,帮帮小妹,在网络上献点爱心,我真的很急!:(

cloudrains 2001-04-27 02:13:00
我的董事长是一个彩票迷,知道我是学习计算机专业毕业后,让我编一个程序:从35个数01~35里任意选7个数,这7个数的所有组合,存到一个文本文档里。据我所知好像有800万个组合,小女子才疏学浅,不能胜此重任,只好求助于网络上的大虾,特到此请各位侠士帮忙,还望多多指教。
我学过点VB和C可实在不知道怎样编程求出所有的组合,请把原程序发到我的信箱 cloudrains@cmmail.com 好么?小女子先谢过了,有机会一定请客吃饭。拜托、拜托,大家都知道找个工作真的很难,我不想失去它。
...全文
131 点赞 收藏 19
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lj9852 2001-04-27
现在不是讨论中奖的事的时候吧
回复
cber 2001-04-27
to cui(蚊子王):
如果你不压缩的话,14 bytes足够了,如35010432192611就可以代表35、01、04、32、19、26、11这7个数字:)
to Aries_L(萧杨):
我们在此讨论只是为了一些技术问题,至于中奖之事,我没有考虑:)
回复
Aries_L 2001-04-27
各位兄弟、你们个个说的条条是道。请问哪位中过奖没有?如果没有这样讨论不是太无聊了吗?
回复
蚊子王 2001-04-27
cber(cber)的压缩方法不错,但人家要保存到文本里去,你能把压缩的数据保存到文本里去?
当然,4*7也是不对的,文本是以字符形式保存的,所以象35是两个字节2是一个字节,因此一组数据(七个数字)平均是(9+26*2)*7/35=12.2个,再加上分隔符号(数字间总得分隔开吧)
是19.2个
回复
cber 2001-04-27
楼上的同志们,一种可能的方法最少也需要有6 bytes来存储,结构定义如下:
struct choice{
int a0:6; //2的6次方64是不小于35的最小值
int a1:6;
int a2:6;
int a3:6;
int a4:6;
int a5:6;
int a6:6;
}
总共42 bits,加上补足的padding bits就是6 bytes(假设不考虑alignment).
而4 bytes(32 bits)能表达的最大数是:4294967296 << 35343332313029
我说的对否;-)
回复
ffmm 2001-04-27
129m我试了一下。
回复
蚊子王 2001-04-27
lj9852(老实狼)的算法不错,但结果算错了。正确的是:
35*34*33*32*31*30*29=33891580800,
33891580800*7*4/(1024*1024*1024)=883.79G
需要约900G(老天,我的爱机才20个G)
回复
lj9852 2001-04-27
怎么离开一会楼上的人就不对了?
回复
lj9852 2001-04-27
楼上的不对吧,是排列,不是组合,既是彩票,数字应没有重复,所以应是
35*34*33*32*31*30*29=1129719320,以每个数字占4个byte计算,要
1129719320*7*4/1024/1024/1024=29.46GB
回复
huang_zhi_x 2001-04-27
应该是 C 7/35 = 35*34*33*32*31*30*29/(1*2*3*4*5*6*7) = ****** 我不知道多少
这种东西是低级趣味了点。
code:

int hello[7];
//从n 个数挑 r 个数到array hello 中

void game(){

int total = 35;
int r = 7;

int pos = 0;
int cur_value = 1;

while(1){

if( ( cur_value > total - r ) && (pos == 0) ) break;

hello[pos++] = cur_value++;

if( pos >= 7 ) {
print_array_to_file();
cur_value ++;
pos --;
}

if( cur_value + begin > total){
cur_value = hello[ --pos ]+1;
}
}


}//end geme()

我没有在编程的环境, 所以错误很多.
请参考高级程序员考试的书, 书里有现成的东西.还有问题请e_mail: huang_zhi_x@163.net
回复
sanhan 2001-04-27
#include <stdio.h>
void main()
{
int i1,i2,i3,i4,i5,i6,i7;

for (i1=1;i1<=35;i1++)
for (i2=i1+1;i2<=35;i2++)
for (i3=i2+1;i3<=35;i3++)
for (i4=i3+1;i4<=35;i4++)
for (i5=i4+1;i5<=35;i5++)
for (i6=i5+1;i6<=35;i6++)
for (i7=i6+1;i7<=35;i7++)
printf("%d,%d,%d,%d,%d,%d,%d\n",i1,i2,i3,i4,i5,i6,i7);
}

老天,我今天真是无聊!

谁让我一见到自称小妹妹的就心慈手软呢?
回复
SoftWare1999 2001-04-27
应该是35*34*33*32*31*30*39/(1*2*3*4*5*6*7)=6724520
以每个数字占4个byte计算,要26898080byte
回复
我不懂电脑 2001-04-27
应该是排列,不是组合吧?
回复
我不懂电脑 2001-04-27
是长沙人吗?有个长沙有钱的要我做个较复杂的六合彩程序,被我不客气的拒绝了。这种东西太低级趣味了。
回复
rushing 2001-04-27
这7个数可以重复吗?
如果不重复,应该是
35*34*33*32*31*30*29= 33891580800 种组合
以每个数字占4个byte计算,要126G磁盘空间。
回复
cloudrains 2001-04-27
有几个人敢对领导说不?我不知道。但我谢谢你们的热心,或许有高手可以为我解决。
我用组合算了了算,好像只有八百多万个组合,没有cber说得那么多吧?也好想不用用到概率!
回复
riluo 2001-04-27
faint...
回复
cber 2001-04-27
乖乖,35选7的可能性也太多了,经过我的计算(利用概率的知识),有
33891580800
种,如果写入文件,即便是纯文本文件,也要占
474482131200
字节(一种可能占14 bytes),400多G啊,请问你们公司里面有没有这么大的存储空间.
对于你们董事长的这种无理要求,建议你坚决的说"不",否则以后有你好受的
回复
Sniper 2001-04-27
所有组合就最容易了。
用个七重循环,每个循环从1到35,然后在内循环中跳过外循环中选出的数(也就是不重复啦)。
这样应该会了吧。
回复
相关推荐
发帖
C语言
创建于2007-09-28

6.4w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2001-04-27 02:13
社区公告
暂无公告