题目是
N个数字,随机组合形成一个数,所有的情况组成一个数的结合。
输出第K大的数字
比方说,N=3,K=3;
输出:213
因为
123
132
213
231
312
321
#include<iostream>
#include<vector>
#include<set>
using namespace std;
void devide(int numerator, int denominator, int& quotient, int& remainder)
{
quotient = numerator / denominator - (numerator % denominator == 0) +1;
remainder = (numerator % denominator == 0) ? denominator : numerator % denominator;
}
int main()
{
const int N = 3;
int K = 3;
int jc[N + 1];
jc[0] = 1;
int quotient=0;
int remainder=0;
int res = 0;
for (int i = 1; i <= N; i++)
{
jc[i] = jc[i - 1] * i;
cout << jc[i] << endl;
}
vector<int> num;
for (int i = 1; i <= N; i++)
num.push_back(i);
for (int i = N - 1; i >= 1; i--)
{
//cout <<"K"<< K << endl;
//int t = K % jc[i];
//cout << "K % jc[i]" << K % jc[i] <<" K / jc[i]:" << K / jc[i]<< endl;
//int index = K / jc[i] + (t > 0) - 1;
//K = t;
devide(K, jc[i], quotient,remainder);
res = res * 10 + num[quotient-1];
cout << num[quotient-1] << endl;
K = remainder;
num.erase(num.begin() + quotient - 1);
/*if (K == 0)
{
for (int i = num.size()-1;i>=0;i--)
res = res * 10 + num[i];
cout << "res:" << res << endl;
return 0;
break;
}*/
}
res = res * 10 + num[0];
cout << "res:" << res << endl;
//system("pause");
return 0;
}