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++;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现