测试输入11 和12及30以上可以正常输出, 但13到30运行错误
#include <cstdio>
#include<iostream>
#include <algorithm>
#include <string>
#define maxn 3*3*3*3*3*3*3*3*3*3+10
using namespace std;
void dfs(int,int);
const int step = 10;
int ans[maxn][11];
long long sul = 0;
int main() {
int n;
scanf("%d", &n);
if (n > 30) {
printf("0"); return 0;
}
dfs(n, step);
for (long long i = 0; i < sul; i++)
for (int j = 0; j < 10; j++)
if (!ans[i][j]) ans[i][j] = ans[i - 1][j];
printf("%d\n", sul);
for (long long i = 0; i < sul; i++) {
for (int j = 0; j < 10; j++)
printf("%d ", ans[i][j]);
printf("\n");
}
return 0;
}
void dfs(int n,int left) {
if (n <= 3 && left == 1) { ans[sul][9]=n;sul++; return; }
for (int i = 1; i <= min(3,n-left+1); i++) {
ans[sul][step - left] = i;
dfs(n - i, left - 1);
}
}
********