从已知的数字中找出所有的组合

原题大置如此:
比如有数字123,那么所有的组合为:
1
2
3
12
13
23
123
如果为1234的话,那么组合为
1
2
3
4
12
13
14
23
24
34
123
124
234
1234
我的答案如下:

#include <iostream.h>

//回溯
void Back(int opts[], int len, int count)
{
    
int index = 0;
    
int i;
    
for( i  = count; i > 1; i--)
    
{
        
if (opts[i - 1- opts[i - 2> 1 )
        
{
            index 
= i - 2;
        }

    }


    opts[index]
++;
    
    
for( i = index + 1; i < count; i++)
    
{
        opts[i] 
= (i - index) + opts[index];
    }

}


//打印数组
void PrintArray(int nums[], int bits[], int len)
{
    
int i = 0
    
for(i = 0; i < len; i++)
    
{
        cout 
<< nums[bits[i] - 1];
    }

    cout 
<< "\n";
}


void SelectNum(int nums[], int len, int counts)
{
    
int * opts = new int[counts];
    
int i = 0
    
for(i = 0; i < counts; i++)
    
{
        opts[i] 
= i + 1;
    }

    
    
while(opts[0<= len - counts + 1)
    
{
        PrintArray(nums, opts, counts);
        
//如果已到达最后一位
        if (opts[counts - 1>= len )
        
{
            Back(opts, len, counts);
        }

        
else
        
{
            
//最后一位往后移一位
            opts[counts - 1]++;
        }

    }

}


int main()
{
    
int len = 0;
    
int nums[10];
    
char digits[10];
    cout 
<< "请输入数字" << endl;
    
for(int i = 0; i < 10; i++)
    
{
        cin 
>> digits[i];
        
if (digits[i] < '0' || digits[i] > '9')
        
{
            
break;
        }

        
else
        
{
            nums[i] 
= digits[i] - '0';
             len
++ ;
        }

    }

    
    
for(int i = 0; i < len; i++)
    
{
        SelectNum(nums, len, i 
+ 1);
    }

}

posted on 2006-08-11 16:51  我的blog  阅读(291)  评论(0编辑  收藏  举报

导航