请问这道题的输出怎么按字典序排列?
在a这个整型数组里有10个元素,大小为1,2或者3,下标从1到10。现在给出一个数,输出满足a中10个数之和为这个数的所有情况,按字典序输出。没有满足条件的情况则输出0。
我的程序可以输出所有结果,但不是按字典序,想问一下应该怎么改?
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[11],s[10000][11],k=0;
void dfs(int x,int remain){
int i;
if(x==0){
if(remain!=0)
return;
}
if(remain==0){
for(i=1;i<=10;i++) s[k][i]=a[i];
k++;
return;
}
if(a[x]==2){
a[x]=3;
dfs(x-1,remain-1);
a[x]=2;
dfs(x-1,remain);
}
if(a[x]==1){
a[x]=2;
dfs(x,remain-1);
a[x]=1;
dfs(x-1,remain);
}
}
int main(void){
int n,i,j;
scanf("%d",&n);
if(n<10 || n>30){
printf("0\n");
exit(0);
}
for(i=0;i<11;i++) a[i]=1;
dfs(10,n-10);
printf("%d\n",k);
for(i=0;i<k;i++){
for(j=1;j<=9;j++){
printf("%d ",s[i][j]);
}
printf("%d\n",s[i][10]);
}
return 0;
}