永发信息网

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

答案:2  悬赏:0  手机版
解决时间 2021-12-17 20:00
  • 提问者网友:一座空城的记忆
  • 2021-12-17 09:14
输入
第1行为n和k,第2行开始为n个正整数的值,整数间用空格隔开。

输出
第k个最小整数的值;若无解,则输出“NO RESULT”。
#include
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-12-17 10:22
题目只说 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楼网友:盐甜味女孩
  • 2021-12-17 11:11
#include         int main(void)  { int a[1000]; int b[1000] = {0}; int n,k; int i; int count = 0; scanf("%d%d",&n,&k); for(i = 0; i < n; i++) { scanf("%d",&a[i]); b[a[i]]++; } for(i = 0; i < 1000; i++) { if(b[i] != 0) count++; if(count == 3) break; } if(count == 3) printf("%d\n",i); else printf("no result\n");      }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯