2015-12-14 27 views
0

我想產生像這些的所有數字:Ç回溯產生的123456789號(1至9位,所有不同)

  • 1位: 1,2,3,4,5 ,6,7,8,9 - (我知道有9號1個 位數)

  • 2個數字: 12,13..19然後21,23 ...... 29 ..... .91,92,93,... 98(我知道 有9 * 8 = 72位數的2位數字)...

  • ...

  • 9位數字: 123456789 .... 987654321(我知道有9! 9 位數字)所有的數字都互不相同

我不認爲這是手工編寫所有的循環一個偉大的想法。所以我知道一個事實,你很可能不得不使用回溯方法,但我還沒有使用它一段時間。

+0

'10'和'20'發生了什麼? –

+0

我意欲創建包含除0 – meiznub

+0

我想這所有的數字號碼,但我只得到9,98987 ..... 987654321 :( 的#include INT NUMAR = 0; 空隙背面(int值) (值> 1)返回(值-1); numar = numar * 10 +值; printf(「numar =%d」,numar); 返回(值-1 );} INT主要(){ 回 (9);} 是的,我 – meiznub

回答

0

要生成所有k-permutations of nn = 9。問題Partial permutations對於C++有幾個有用的答案。我將一個實現移植到C並將其調整爲適合您的需求:

#include <stdio.h> 
#include <string.h> 

void comb(char *rest, int n) 
{ 
    static int sofar; 
    static char sogood[10]; 
    if (n == 0) 
     puts(sogood); 
    else 
     for (int i = 0; i < strlen(rest); i++) 
     { 
      sogood[sofar] = rest[i]; 
      char substring[10]; 
      strcpy(memcpy(substring, rest, i)+i, rest+i+1); 
      ++sofar, comb(substring, n-1), --sofar; 
     } 
} 

int main() 
{ 
    for (int k = 1; k <= 9; ++k) 
     comb("123456789", k); 
}