组合题
#include <algorithm>#include <cstdio>#include <cstring>bool flag[27];int n;int p[27];int ans = 0;void dfs(int k) {    if (k == n + 1) {        ++ans;        return;    }    for (int i = 1; i <= n; ++i) {        if (flag[i]) continue;        if (k > 1 && i == p[k - 1] + 1) continue;        p[k] = i;        flag[i] = true;        dfs(k + 1);        flag[i] = false;    }    return;}int main() {    scanf("%d", &n);    dfs(1);    printf("%d\n", ans);    return 0;} 
第16题判断题原卷 1 分

(1 分) 当输入的 n=3n=3 的时候,程序输出的答案为 3。

填写答案
第17题判断题原卷 1.5 分

在 dfs 函数运行过程中,kk 的取值会满足 1≤k≤n+11 \leq k \leq n+1。

填写答案
第18题判断题原卷 1.5 分

删除第 19 行的 flag[i]=false;,对答案不会产生影响。

填写答案
第19题单选题原卷 3 分

当输入的 n=4n=4 的时候,程序输出的答案为( )。

填写答案
第20题单选题原卷 3 分

如果因为某些问题,导致程序运行第 25 行的 dfs 函数之前,数组 p 的初值并不全为 0,则对程序的影响是( )。

填写答案
第21题单选题原卷 3 分

假如删去第 14 行的 if(flag[i]) continue;,输入 3,得到的输出答案是( )。

填写答案