gpt4 book ai didi

C:扫描数组时忽略一个值

转载 作者:太空宇宙 更新时间:2023-11-04 01:09:07 25 4
gpt4 key购买 nike

我正在分析一个数组,并使用一个结构来保存每个项目的位置和值,我想获得这个数组的三个最小值。这个问题是我必须忽略一个值,在这种情况下为“-5”。如果我试图忽略这个值,索引就会困惑,我不知道该怎么做。

这是我的尝试:

#include <cstdlib>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>

using namespace std;
typedef struct pair {
int value, column;
} Pair;
int cmp(const void *a, const void *b);

int main(int argc, char** argv) {

Pair data_pair[8];

int row[8] = {0, 3, 1, -5, 1, 2, 3, 4};
for (int i=0;i<8;++i){
if (row[i] != -5){ // Ignore the value -5 from the array
data_pair[i].value = row[i];
data_pair[i].column = i;
}
}

printf("\n\nThe three minimum values of this line are:");
qsort(data_pair, 8, sizeof(Pair), cmp);
for(int i=0;i<3;++i)
printf("\nvalue = %d, column = %d", data_pair[i].value, data_pair[i].column);

return 0;
}

int cmp(const void *a, const void *b){
Pair *pa = (Pair *)a;
Pair *pb = (Pair *)b;
return pa->value - pb->value; }

这是我的导出:

The three minimum values of this line are:
value = 0, column = 0
value = 0, column = 0
value = 1, column = 4

当所需的解决方案是:

The three minimum values of this line are:
value = 0, column = 0
value = 1, column = 2
value = 1, column = 4

我做错了什么?我想要一个解决方案,只更改公开代码的某些部分。
提前致谢

最佳答案

您手头的问题源于使用共享索引 i 并对数组进行排序,而不管数组中实际有多少项(例如,无条件传递 8 作为尺寸)。

通过不在 data_pair 中的所有索引处设置值,您正在对混合中的一些垃圾结果进行排序!

因此您可以使用带有 data_pair 的第二个索引器来帮助过滤结果:

/* somewhere above: int j; */
for (i=0, j=0;i<8;++i){
if (row[i] != -5){ // Ignore the value -5 from the array
data_pair[j].value = row[i];
data_pair[j].column = i;
j++; /* indexes data_pair */
}
}

现在 j 将包含在 data_pair 中找到的 Pair 的计数:

/* j substitutes for an explicit 8 */
qsort(data_pair, j, sizeof(Pair), cmp);

关于C:扫描数组时忽略一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16651939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com