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;
    
    }
    
    
    int Wpermutation(int st, int en, int n, bool bRepeat);
     n个数的组合(数字范围st~en),考虑重复元素:
    
    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;
    }
    

      

  • 相关阅读:
    JS字符串函数String.replace()[转]
    分辨率和比例尺[转]
    DateDiff 函数的用法 SQL时间比较
    ASP.NET 2.0 本地化2
    ASP.NET 2.0 本地化1
    简单的分页过程,确在第10,20,30....等页,不能显示,请求帮忙,谢谢
    JQuery打造的分页无刷新的Repeater
    让flash置于DIV层之下的方法,让flash不挡住飘浮层或下拉菜单
    VS2005 + VSS6.0 简单应用示例
    SQLServer查询最近一天,三天,一周,一月,一季度方法
  • 原文地址:https://www.cnblogs.com/welen/p/3937745.html
Copyright © 2011-2022 走看看