P1138 第 k 小整数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

 

dalao 勿喷,适合新手

思路就是排序加查重,最后判断第k小数。思路十分简单。

刚开始我一直想二维循环查重

错误代码:

#include<iostream>
#include<algorithm>  
using namespace std;
int a[1000005],n,k;
int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++)
        cin>>a[i];
        int f=k;
    sort(a,a+n);
    /*
    for(int i=1;i<=n;i++) {
        cout<<a[i]<<" ";
        if(i==n){
            cout<<endl;
        }
    }
    */
   for(int i=1;i<=f;i++){
        for(int j=i+1;j<=n;j++){
            if(a[i]==a[j]){
                f++;//cout<<i<<" "<<j<<" "<<f<<endl;  不进行查重,有重复次数,直接累加循环次数
            }
            
            else break;
        }
        if(i==f){
            cout<<a[i];
            return 0;
        }
    
   }
   cout<<"NO RESULT";
    return 0;
}

也不知道错哪,样例对了,自己造的数也对了,但只得20分。

后来改变了思路,直接用大于号这样就不用查重了

代码如下:

#include<iostream>
#include<cstdlib>
#include<algorithm>
using namespace std;
int i,n,k,f;
int a[10010]; 
int main(){
    cin>>n>>k; 
    for(i=1;i<=n;i++){
        cin>>a[i]; //输入n个数
    }
    sort(a+1,a+n+1);
    for(i=1;i<=n;i++){
        if(a[i]>a[i-1]){ //判断k第几小
            k--;
            f=i;
        }
        if(k<=0) break; //条件break
    }
    if(k==0) cout<<a[f]<<endl; 
    else cout<<"NO RESULT"<<endl; //判断,如果已经循环完了但是还没有找到第k小的,就输出NO RESULT
    return 0;
}

祝大家RT++;

 

posted on 2022-09-03 21:04  ljq0120  阅读(70)  评论(0编辑  收藏  举报