0
這是一個置換代碼,但它不會打印所有可能的排列。只打印輸入。這段代碼有什麼問題?C代碼排列
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int bitmask;
char* characters;
int characters_count;
char* running;
int running_count;
void permutations() {
int i;
if (running_count == characters_count) {
printf("%s\n", running);
} else {
for (i=0; i<characters_count; i++) {
if (((bitmask>>i)&1) == 0) {
running[running_count] = characters[i];
bitmask |= (1<<i);
running_count = running_count + 1;
permutations();
running_count = running_count - 1;
}
}
}
}
main() {
int i;
int cases;
characters = (char*)malloc(sizeof(char)*30);
scanf("%s", characters);
characters_count = strlen(characters);
running = (char*)malloc(sizeof(char)*30);
memset(running, 0, 30);
running_count = 0;
permutations();
free(characters);
free(running);
}
樣品輸入
ab
ba
ab
樣本輸出
ab
,而不是我的朋友認爲只有一條線是這裏的一些錯誤。但我無法弄清楚什麼線是我缺乏
你需要在'permutations();'後面恢復'bitmask'。 – BLUEPIXY
或者只是將其設置爲'permutations'。 – Lynn
@Mauris:使它對'permutations'本地不起作用,但是您可以將它作爲'permutations'的參數並傳遞修改後的值'bitmask | (1 << i)'遞歸時。 – chqrlie