问题描述:
12个高矮不同的人,排成2排.每排必须是从矮到高排列,而且第2排比对应的第1排的人高,
问:
排列方式共有多少种.
此题为阿里巴巴笔试题.
解决方案:
#include <iostream>
#include <vector>
using namespace std;
class twoQueue{
public:
twoQueue(int n):mMaxNum(n/2),mCount(0),mAllCount(0){
if(n > 1){
mCount = 1;
int i;
for(i = 0;i < n/2;i++){
mData.push_back(i);
}
}
}
void run(){
if(mMaxNum <= 0){
return;
}
int i = mMaxNum - 1;
while(i){
++mData[i];
mAllCount++;
if(mData[i] <= 2*i){
int j = i+1;
for(;j < mMaxNum;j++){
mData[j] = mData[j-1]+1;
}
}
else{
i--;
continue;
}
if(mData[mMaxNum - 1] <= 2*(mMaxNum - 1)){
++mCount;
int k = 0;
for(;k < mMaxNum;k++){
cout<<mData[k]<<"\t";
}
cout<<endl;
i = mMaxNum - 1;
}
else{
return;
}
}
}
void printResult(){
cout<<"Result is as follows:"<<endl;
cout<<"mAllCout:"<<mAllCount<<"(total number of operations in while)"<<endl;
cout<<"Total count of sort kinds :"<<mCount<<endl;
}
private:
int mMaxNum;
int mCount;
//计数器
int mAllCount;
//vector容器
vector<int> mData;
};
int main(){
int n;
n = 12;
twoQueue testQueue(n);
testQueue.run();
testQueue.printResult();
return 0;
}