简单的少犯点错误
int num[23],n;
void cal(int x,int cnt){
if(x>n){
rep(i,1,cnt-1){
print(num[i]);
blank;
}
if(cnt) println(num[cnt]);
return;
}
cal(x+1,cnt);//
// rep(i,x+1,n){
//
// }
num[cnt+1]=x+1;
cal(x+1,cnt+1);
//pop
}
int main(){
n=4;
cal(0,0);
}
- cnt==0时不要输出
- 往下枚举不要傻傻地rep,前面cal就已经选择了不枚举
- 如果只随机选出m个直接加判定cnt>m||cnt+n-x+1<m结束,不要忘了后面不可能存在的情况

浙公网安备 33010602011771号