zoukankan      html  css  js  c++  java
  • n全排列输出和 n个数的组合(数字范围a~b)

    n全排列输出:

    int WPermutation(int num, bool bRepeat)

    num表示num全排列

    bRepeat标志是否产生反复元素的序列。


    int Permutation(int n, int* A, int cur, bool bRepeat) 
    {
    	static int number = 0;
    	if(cur == n)
    	{   
    		number++;
    		for(int i = 0; i< n; i++)
    		{
    			printf("%d ", A[i]);
    		}
    		printf("
    ");
    	}
    	else
    	{
    		for(int i = 1; i <= n; i++)
    		{
    			int ok = 1;
    			for(int j = 0; j < cur; j++)    
    			{
    				if(!bRepeat)
    				{
    					if(A[j] == i)
    					{
    						ok = 0;
    					}
    				}
    			}
    			
    				if(ok)
    				{
    					A[cur] = i;
    					Permutation(n, A, cur + 1, bRepeat);
    				}			
    
    		}
    	}
    
        return number;
    }
    int WPermutation(int num, bool bRepeat)
    {
    	printf("%d permutation(%s): %d ~ %d
    ", num, bRepeat?"repeat mode":"single mode", 1, num);
    	int n = num;
    	int *A = (int*)malloc(n*sizeof(int));
    	memset(A, 0, sizeof(n*sizeof(int)));
    	int cur = 0;
    	int number = Permutation(n, A, cur, bRepeat);
    	delete [] A ;
    	A = NULL;
    	printf("over!
    ");
    	return number;
    
    }


    n个数的组合(数字范围st~en),考虑反复元素:

    int Wpermutation(int st, int en, int n, bool bRepeat);

    n表示n个数字组合

    每一个数字范围:st~en

    bRepeat标志是否产生反复元素的序列。


    int Permutation(int st, int en, int n, int* A, int cur, bool bRepeat)
    {
    	static int number = 0;
    
    	if(cur == n)
    	{   
    		number++;
    		for(int i = 0; i< n; i++)
    		{
    			printf("%d ", A[i]);
    		}
    		printf("
    ");
    	}
    	else
    	{
    		for(int i = st; i <= en; i++)
    		{
    			int ok = 1;
    			for(int j = 0; j < cur; j++)
    			{
    				if(!bRepeat)
    				{
    					if(A[j] == i)
    					{
    						ok = 0;
    					}
    				}
    			}
    
    			if(ok)
    			{
    				A[cur] = i;
    				Permutation(st, en, n, A, cur + 1, bRepeat);			
    			}			
    
    		}
    	}
    
    	return number;
    }
    
    int Wpermutation(int st, int en, int n, bool bRepeat)
    {
    	printf("%d permutation(%s): %d ~ %d
    ", n, bRepeat?"repeat mode":"single mode", st, en);
    	int num = en - st + 1;
    	if(n > num)
    	{
    		bRepeat = true;
    		printf("too many number, to be repeat mode:
    ");
    	}
    
    	int *A = (int*)malloc(n*sizeof(int));
    	memset(A, 0, sizeof(n*sizeof(int)));
    	int cur = 0;
    	int number = Permutation(st, en, n, A, cur, bRepeat);
    	delete [] A ;
    	A = NULL;
    	printf("over!
    ");
    	return number;
    }
    
    

  • 相关阅读:
    控件还是还原到客户端的好
    练习之彩票一 需求整理和分析
    Oracle 查询并删除重复记录的SQL语句
    C# 如何生成CHM帮助文件
    C#生成CHM帮助文件—>续
    datagridview中用Enter代替tab实现焦点切换,可换行
    博客园的dotaer
    winfrom中datagridview指定单元格为编辑状态
    C#生成CHM帮助文件(linq版)
    C语言03
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4076181.html
Copyright © 2011-2022 走看看