Проблема найти идентификационный номер по минимальным и максимальным значениям - PullRequest
0 голосов
/ 31 октября 2019

Итак, я пытаюсь создать простую программу, которая считывает целые числа значений и идентификационный номер, чтобы на выходе был минимальный максимум значения и его maxID minID число. Первое целое число входного файла будет указывать, сколько еще входных данных будет прочитано в циклах. Моя программа компилируется без проблем, и минимальный максимальный вывод корректен, однако вывод идентификационных номеров неверен. Может ли кто-нибудь помочь мне с диагностикой этой проблемы? Извините за мой глупый вопрос, я новичок в программировании. Спасибо.

#include <stdio.h>

int main(){

int val[100],id[100];
int i, max, min, size, idmax, idmin,minindex,maxindex;

printf("Enter how many IDs: ");
scanf("%d", &size);

printf("Enter ID numbers and values:\n");
for(i=0; i<size; i++)
{
    scanf("%d %d", &id[i], &val[i]);
}


max = min = val[0];

for(i=1; i<size; i++)
{
    if(val[i] > max)
    {
        max = val[i];
        maxindex = i;
        for(i=0;i<size;i++){
          if(id[i]==maxindex){
            idmax=id[i];
          }
        }
      }

    if(val[i] < min)
    {
        min = val[i];
        minindex = i;
        for(i=0;i<size;i++){
          if(id[i]==minindex){
            idmin=id[i];
          }
        }
    }
}

printf("Max number = %d with ID number = %d\n", max, idmax);
printf("Min number = %d with ID number = %d\n", min, idmin);

return 0;

}

1 Ответ

0 голосов
/ 31 октября 2019

Вы делаете проблему более сложной, чем она есть на самом деле. При работе через список; вы можете просто обновить значение idmax или idmin всякий раз, когда обновляете соответствующее значение max или min:

#include <stdio.h>

int main() {

    int val[100], id[100];
    int i, max, min, size, idmax, idmin;/// No longer need these: minindex, maxindex;

    printf("Enter how many IDs: ");
    scanf("%d", &size);

    printf("Enter ID numbers and values:\n");
    for (i = 0; i < size; i++) {
        scanf("%d %d", &id[i], &val[i]);
    }

    max = min = val[0];
    idmin = idmax = id[0];/// Initialize IDs similarly to min and max

    for (i = 1; i < size; i++) {
        if (val[i] > max) {
            max = val[i];
            idmax = id[i];/// Only need to change this when max changes
        }
        if (val[i] < min) {
            min = val[i];
            idmin = id[i];/// Only need to change this when min changes
        }
    }

    printf("Max number = %d with ID number = %d\n", max, idmax);
    printf("Min number = %d with ID number = %d\n", min, idmin);

    return 0;
}
...