思路:
第一眼看到这个题,依然是一脸懵逼…
最开始想的是一边输入就一边从小到大排序,最后直接读第k个值,结果写着写着发现题意都理解错了…每次需要排序的值是由输入决定的。
回头是岸后就一顿for循环,排序用的冒泡排序,作为一个小渣渣我还只会写选择排序法和冒泡排序法。
百度出来这个十大经典排序算法:https://www.cnblogs.com/onepixel/articles/7674659.html
里面的动图演示太到位了,留着下次看hhhh
注意:
- 存储序列和排序用的两个数组,每次排序结束后,重置数组xu[ ]为最初输入的数组num[ ].(因为开始没写这个一直出错 困惑了半天觉得实在是没毛病终于给我发现了…)
- xu[f[l]+k[l]-2] 减几也不是一次算对的…
- 由小到大,询问个数m最后再加的
代码:
#include<iostream>
using namespace std;
int main()
{
int n,m;
int num[1000],xu[1000],f[1000],r[1000],k[1000];
cin>>n;
for(int i=0;i<n;i++)
cin>>num[i];
cin>>m;
for(int i=0;i<m;i++)
cin>>f[i]>>r[i]>>k[i];
for(int l=0;l<m;l++)
{
for(int i=0;i<n;i++)
xu[i]=num[i];
for(int i=f[l]-1;i<r[l];i++)
for(int j=i+1;j<r[l];j++)
if(xu[i]<xu[j])
{
int temp;
temp=xu[i];
xu[i]=xu[j];
xu[j]=temp;
}
cout<<xu[f[l]+k[l]-2]<<endl;
}
return 0;
}