【发布时间】:2016-12-09 21:16:47
【问题描述】:
我正在为我的任务而苦苦挣扎。我们的任务是对输入进行所有可能的排列(已经按字母顺序排列)。我的代码仅适用于 3 个字符,之后它没有做,我期望它做。我一直在寻找错误5个小时,但没有任何成功。
void perm(char *input_arr, int len_arr, int done) {
if (done == len_arr - 1) {
for (int i = 0; i < len_arr; i++) {
printf("%c", perm[i]);
}
printf("\n");
} else {
for (int i = done; i < len_arr; i++) {
swapityy_swap(&perm[done], &perm[i]);
sperm(perm, len_arr, done + 1);
swapityy_swap(&perm[done], &perm[i]);
}
qsort(perm, len_arr, sizeof(char), compity_dawg);
}
}
期待您的回音,亲爱的
【问题讨论】:
-
您提供的代码似乎不太可能完全工作,至少如果您将“工作”定义为打印
perm()通过参数接收的数组的排列input_arr。它必须实际检查数组的内容才能实现这一点。在此之前,它必须实际编译。 -
在询问运行时错误时,正如这个问题所做的那样,需要发布干净编译、简短且仍然显示错误的代码。发布输入数据,发布实际输出,发布预期输出。
-
为了便于阅读和理解:1) 通过一个空行分隔代码块(for、if、else、while、do...while、switch、case、default)。 2)遵循公理:*每行只有一个语句,并且(最多)每个语句一个变量声明。 (考虑一个右大括号'}。作为一个单独的语句。
-
发布的代码缺少#include 语句、输入数据、预期输出、实际输出、main() 函数、comity_dawg() 函数。 swapityy_swapp() 函数。发布的函数名为:perm(),它有 3 个参数,但那些递归调用只有一个参数
-
我想补充一下上面@user3629249 所说的内容:库函数
qsort对数组进行排序——但是你传递了一个函数给它(第一个参数是perm) !swapityy_swap调用也存在同样的问题...此外,您进行了类似递归调用的操作——但被调用者实际上不是调用者(sperm与perm)!一般来说:这不是一个正在运行甚至是可编译的代码。它并非全部工作。
标签: c permutation