Я анализирую массив и, используя структуру для сохранения позиции и значения каждого элемента, хочу получить три минимальных значения этого массива. Проблема в том, что в этом случае я должен игнорировать значение «-5». И если я попытаюсь проигнорировать это значение, индекс испортится, и я не знаю, как это сделать.C: Игнорирование значения при сканировании массива
Это моя попытка:
#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; }
Это выход у меня:
Три минимальных значений этой линии:
значения = 0, столбец = 0
Значение = 0, столбец = 0
значение = 1, столбец = 4
Когда желаемое решение:
Три минимальные значения этой линии являются:
значение = 0, столбец = 0
значение = 1, колонка = 2
значение = 1, колонка = 4
Что я делаю неправильно? Я хотел бы иметь решение, просто изменяющее некоторые части открытого кода.
Заранее спасибо
Где определяется 'data_pair'? – user7116
Удалить '#include', '#include ' и 'using namespace std;', чтобы сделать это C. –
Почему бы просто не отсортировать исходные значения, а затем прокрутить и выбросить -5, когда вы перечислите результаты? –