组合题6 个小题
已作答 0 / 6
1#include <iostream>2#include <cstdlib>3using namespace std;4 5int n;6int d[10000];7 8int find(int L, int R, int k) {9 int x = rand() % (R - L + 1) + L;10 swap(d[L], d[x]);11 int a = L + 1, b = R;12 while (a < b) {13 while (a < b && d[a] < d[L])14 ++a;15 while (a < b && d[b] >= d[L])16 --b;17 swap(d[a], d[b]);18 }19 if (d[a] < d[L])20 ++a;21 if (a - L == k)22 return d[L];23 if (a - L < k)24 return find(a, R, k - (a - L));25 return find(L + 1, a - 1, k);26}27 28int main() {29 int k;30 cin >> n;31 cin >> k;32 for (int i = 0; i < n; ++i)33 cin >> d[i];34 cout << find(0, n - 1, k);35 return 0;36}假设输入的 n,k 和 d[i] 都是不超过 10000 的正整数,且 k 不超过 n,并假设 rand() 函数产生的是均匀的随机数,完成下面的判断题和单选题:
第 9 行的 x 的数值范围是 L+1 到 R,即 [L+1,R]。( )