#include<iostream> #include<vector> using namespace std; //string s; void f(int x,int y,int k,vector<vector<int>> a,string s); int main() { int x=10; int y=12; vector<vector<int>> a(y+1,vector<int>(x+1,0)); for(int i=0;i<=y;i++) a[i][0]=1; for(int i=0;i<=x;i++) a[0][i]=1; for(int i=1;i<=y;i++) for(int j=1;j<=x;j++) a[i][j]=a[i-1][j]+a[i][j-1]; for(int i=0;i<=y;i++) { cout<<i<<"行: "; for(int j=0;j<=x;j++) cout<<a[i][j]<<" "; cout<<endl; } string s=""; f(x,y,111,a,s); return 0; } void f(int x,int y,int k,vector<vector<int>> a,string s) { if(k>a[y][x]) {cout<<"too big K"<<endl;return;} if(x==0||y==0) {for(int i=0;i<x;i++) s.push_back('a'); for(int i=0;i<y;i++) s.push_back('z'); cout<<s<<endl; return; } int nu=0; for(int i=0;i<=x;i++) if(nu+a[y-1][i]>=k) {for(int j=0;j<x-i;j++) s.push_back('a'); s.push_back('z'); f(i,y-1,k-nu,a,s);break; } else nu+=a[y-1][i]; }跟楼主思路差不多,C++的,X Y分别代表a和z的个数,k是第几个。