#1731. 珅泽教育CSP-J第一轮模拟考第七套 第 35 题

珅泽教育CSP-J第一轮模拟考第七套 第 35 题

第3题

long long k;
int n;
int p[20];
bool used[20] = {false};
long long frac[20];

void gen(int i)
{
    if (i > n)
    {
        for (int i = 1; i <= n; ++i) std::cout << p[i] << " ";
        return;
    }

    for (int a = 1; a <= n; ++a)
        if (not used[a]) {
            if (k <= frac[n-i]) {
                p[i] = a;
                used[a] = true;
                gen(i+1);
                return;
            }
            else {
                k -= frac[n-i];
            }
        }
}

int main()
{
    n = 1;
    frac[0] = frac[1] = 1;
    std::cin >> k;
    while (k > frac[n]) {
        k -= frac[n];
        frac[n+1] = frac[n] * (n+1);
        n++;
    }
    gen(1);
}

如果使得输出序列出现 7,则输入 k 最少需要( )。

{{ select(1) }}

  • 343343
  • 874874
  • 21702170
  • 50405040