zoukankan      html  css  js  c++  java
  • 组合之01转换法

    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;
    }
    


     

  • 相关阅读:
    Linux基本命令
    LR之流程
    Jmeter&Ant构建自动化测试平台
    正则表达式
    搭建wordpress-安装xshell
    git本地文件提交
    Git基本操作
    python-之基本语法
    SQL语句之-简单查询
    postman之请求&断言
  • 原文地址:https://www.cnblogs.com/riasky/p/3507430.html
Copyright © 2011-2022 走看看