1

私は配列を分析しており、構造体を使用して各項目の位置と値を保存し、この配列の 3 つの最小値を取得したいと考えています。これの問題は、この場合は「-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; }

これは私が持っている出口です:

この行の 3 つの最小値は次のとおりです:
値 = 0、列 = 0
値 = 0、列 = 0
値 = 1、列 = 4

目的のソリューションが次の場合:

この行の 3 つの最小値は次のとおりです:
値 = 0、列 = 0
値 = 1、列 = 2
値 = 1、列 = 4

私が間違っていることは何ですか?公開されたコードの一部を変更するだけの解決策が欲しいです。
前もって感謝します

4

2 に答える 2