#include <cstdio> #include<iostream> #include<queue> #include<algorithm> #include<cstring> #include<iomanip> #define inf 0x3f3f3f3f3f3f3f3fLL using namespace std; typedef long long ll; const int N=1e6; int n,k; int a[N]; int quick(int l,int r,int k) { if(l==r) return a[l]; int i=l-1,j=r+1,x=a[l]; while(i<j) { while(a[i++]<x); while(a[j--]>x); if(i<j) swap(a[i],a[j]); } int s=j-l+1; if(k<=s) return quick(l,j,k); return quick(j+1,r,k-s); } int main() { cin>>n>>k; for(int i=0;i<n;i++) { cin>>a[i]; } cout<<quick(0,n-1,k); return 0; }上述代码为什么报错
时间: 2023-06-26 08:05:27 浏览: 223
使用include <iostream>时一定要加using namespace std
代码中存在一些问题,可能导致编译器报错。具体问题可见以下解释:
1. 缺少头文件
代码开头只有一行 `#include <cstdio>`,缺少其他可能需要的头文件,如 `iostream`、`queue`、`algorithm`、`cstring` 等。
可以添加以下代码:
```c++
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
#include<iomanip>
```
2. 数组大小
定义了数组 `a` 后,没有指定其大小,应该将数组大小指定为常量 `N`,即 `int a[N]`。
3. 变量未定义
在主函数中使用了 `n` 和 `k` 两个变量,但是并没有给它们赋初值,需要在输入时进行初始化。
4. 函数返回类型错误
定义了 `quick` 函数,但是没有给出返回类型,应该指定其返回类型为 `int`。
5. 函数参数类型错误
定义了 `quick` 函数,但是其参数类型应该为 `int l, int r, int k`,而不是 `int left, int right, int k`。
6. 函数内部变量未定义
在 `quick` 函数中,定义了变量 `i` 和 `j`,但是没有给出初始值,这可能导致编译器报错。可以将其初始化为 `l-1` 和 `r+1`。
7. 函数返回值错误
在 `quick` 函数中,当 `k<=s` 时应该返回 `quick(l,j,k)`,而不是 `quick(left,j,k)`。同理,当 `k>s` 时应该返回 `quick(j+1,r,k-s)`,而不是 `quick(j+1,right,k-s)`。
修改完上述问题后的代码如下:
```c++
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstring>
#include <iomanip>
#define inf 0x3f3f3f3f3f3f3f3fLL
#define N 1000000
using namespace std;
typedef long long ll;
int n,k;
int a[N];
int quick(int l,int r,int k) {
if(l==r) return a[l];
int i=l-1,j=r+1,x=a[l];
while(i<j) {
while(a[++i]<x);
while(a[--j]>x);
if(i<j) swap(a[i],a[j]);
}
int s=j-l+1;
if(k<=s) return quick(l,j,k);
return quick(j+1,r,k-s);
}
int main() {
cin>>n>>k;
for(int i=0;i<n;i++) {
cin>>a[i];
}
cout<<quick(0,n-1,k);
return 0;
}
```
阅读全文