免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2253 | 回复: 5
打印 上一主题 下一主题

[算法] 求关于求彩票可能出现的组合的算法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-24 20:20 |只看该作者 |倒序浏览
请高手指点一下,用C或JAVA编写一个求彩票组合的算法:  
比如说 6个数字为一组 每个数字的范围为1-32 数字不能重复,如123456和654321也算一组,求可能出现的组合有多少组。  
用FOR语句我已经实现,求更好的算法。

论坛徽章:
0
2 [报告]
发表于 2005-12-25 10:31 |只看该作者
求的是排列,不是组合
p(6,32)=32*31*30*29*28*27

论坛徽章:
0
3 [报告]
发表于 2005-12-25 13:00 |只看该作者
求的是组合,不是排列

论坛徽章:
0
4 [报告]
发表于 2005-12-25 15:33 |只看该作者
原帖由 誓不_低头 于 2005-12-25 13:00 发表
求的是组合,不是排列


不是说123456和654321都算?

组合的话这两个一样
c(6,32)=32*31*30*29*28*27/(1*2*3*4*5*6)

论坛徽章:
0
5 [报告]
发表于 2005-12-25 17:56 |只看该作者
按照楼主要求就是排列嘛

论坛徽章:
0
6 [报告]
发表于 2006-01-01 10:58 |只看该作者
用递归行不?

static int *array;
static int max_num;
static array_len;

pailie(m)
int m;
{
  int i,j;

  if(m==0)
  {
    for(i=0;i<array_len;i++)
    {
      printf("%d,",array[i]);
    }
    printf("\n");
    return;
  }

  for(i=1;i<=max_num;i++)
  {
    for(j=m;j<array_len&&array[j]!=i;j++);
    if(j<array_len) continue;
    array[m-1]=i;
    pailie(m-1);
  }

  return;
}

main()
{
  char *tmp_str;

  printf( "input length of array:" );
  gets( tmp_str );
  array_len = atoi( tmp_str );

  printf( "input max number:" );
  gets( tmp_str );
  max_num = atoi( tmp_str );

  array = (int *)malloc(sizeof(int)*array_len);

  pailie(max_num);

  return;
}

在windows的turbo c环境下执行成功。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP