现有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");
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯