现有n个正整数,n≤100000,要求出这n个正整数中的第k个最小整数(相同大小的整数只计算一次),k≤400。

输入第1行为n和k,第2行开始为n个正整数的值,整数间用空格隔开。输出第k个最小整数的值;若无解,则输出“NORESULT”。#include<stdio.h>intma... 输入
第1行为n和k,第2行开始为n个正整数的值,整数间用空格隔开。

输出
第k个最小整数的值;若无解,则输出“NO RESULT”。
#include<stdio.h>
int main(void){
int a[101][101];
int b[101][101] = {0};
int n,k;
int i,j,l,c,d;
int count = 0;
scanf("%d%d",&n,&k);
for(i=0;i<100; i++)
for(j=1;j<=100;j++){
if(i*100+j<=n){
scanf("%d",&a[i][j]);
c=a[i][j]/100;
d=a[i][j]%100;
b[c][d]++;
}
else{
i=100;j=101;}
}
for(i=0;i<100; i++)
for(j=1;j<=100;j++){
if(b[i][j]!= 0){
count++;
l=i*100+j;
}
if(count == k){
i=100;j=101;}
}
if(count == k&&k<=400)
printf("%d\n",l);

else
printf("NO RESULT\n");
}
为什么运行错误
展开
 我来答
帐号已注销
2021-10-29 · TA获得超过77.1万个赞
知道小有建树答主
回答量:4168
采纳率:93%
帮助的人:165万
展开全部

n≤100000和k≤400。

c=a[i][j]/100;

d=a[i][j]%100;

b[c][d]++;

这几行代码中 c就有可能是超过100的 比如输入的是100000。

这样c=1000。

b[c][d]就越界了。

只需要对每个输入的 进行插入排序,同时只保留前k个就好。

开一个400的数组。

最后a[k-1]就是结果。

含义

和整数一样,正整数也是一个可数的无限集合。在数论中,正整数,即1、2、3……;但在集合论和计算机科学中,自然数则通常是指非负整数,即正整数与0的集合,也可以说成是除了0以外的自然数就是正整数。正整数又可分为质数,1和合数。正整数可带正号(+),也可以不带。

风若远去何人留
2016-10-17 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450126
专业C/C++软件开发

向TA提问 私信TA
展开全部
题目只说 n≤100000和k≤400。

但是并没有限定输入整数的规模
这样
c=a[i][j]/100;
d=a[i][j]%100;
b[c][d]++;
这几行代码中 c就有可能是超过100的 比如输入的是100000
这样c=1000
明显 b[c][d]就越界了。

其实没那么复杂。
只需要对每个输入的 进行插入排序,同时只保留前k个就好。
开一个400的数组。
最后a[k-1]就是结果。
更多追问追答
追问
谢谢你的建议,可我设成a[101][1001],为什么答案错误了
追答
算法本身就错了 出什么结果 都正常。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
物理公司的
2016-10-17 · TA获得超过5695个赞
知道大有可为答主
回答量:6105
采纳率:86%
帮助的人:1364万
展开全部
开一个int a[100000]的并初始化为0,依次输入i-N,把对应的a[i]改为1
然后从a[0]开始数为1的数,第K个就是第几个数为1的数,把i输出来
复杂度依次输入为N,一次循环N
N+N=N的复杂度
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式