随笔 - 41  文章 - 0  评论 - 0  阅读 - 1689 

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   ljq0120  阅读(77)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示