设为首页 加入收藏

TOP

组合之01转换法
2014-02-08 13:36:11 来源: 作者: 【 】 浏览:97
Tags:组合 转换

  m个数中取n个数的所有组合问题

  从左到右扫描数组元素值的"10"组合,找到第一个"10"组合后将其变为"01"组合,同时将其左边的所有"1"全部移动到数组的最左端

  代码如下: #include <IOSTREAM>

  using namespace std;

  #define SIZE 100

  struct data{

  int elem;

  int b;

  };

  inline void move(data tmp[], int num, int r){

  for(int i = 0; i < num; i++){

  tmp[i].b = 1;

  }

  for(int j = num; j < r; j++){

  tmp[j].b = 0;

  }

  }

  inline void println(data tmp[], int len){

  for(int i = 0; i < len; i++){

  if(tmp[i].b == 1)

  cout 《 tmp[i].elem 《 " ";

  }

  cout 《 endl;

  }

  void comb(int arr[], int len, int count){

  data tmp[SIZE];

  for(int i = 0; i < len; i++){

  tmp[i].elem = arr[i];

  if(i < count){

  tmp[i].b = 1;

  }

  else{

  tmp[i].b = 0;

  }

  }

  println(tmp, len);

  while(true){

  int j = 0;

  int num = 0;

  while(j+1 < len){

  if(tmp[j].b == 1){

  num++;

  if(tmp[j+1].b == 0){

  tmp[j].b = 0;

  tmp[j+1].b = 1;

  move(tmp, num-1, j);

  break;

  }

  }

  ++j;

  }

  if(j+1 < len)

  println(tmp, len);

  else

  break;

  }

  }

  int main(int argc, char* argv[])

  {

  int testArr[] = {2, 5, 1, 7, 4};

  int len  = sizeof(testArr)/sizeof(int);

  comb(testArr, len, 3);

  return 0;

  }

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++ Primer Plus:处理.. 下一篇全排列之字典序法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·PostgreSQL 索引 - (2025-12-25 22:20:43)
·MySQL Node.js 连接 (2025-12-25 22:20:41)
·SQL 撤销索引、表以 (2025-12-25 22:20:38)
·Linux系统简介 (2025-12-25 21:55:25)
·Linux安装MySQL过程 (2025-12-25 21:55:22)