Вычисление номера пакета из одной строки, состоящей из целых чисел - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь прочитать список чисел в виде строки и рассчитать, сколько пакетов должно быть. Каждый пакет имеет максимум 50. Например, вывод "25 25 25 -1" должен быть 2, но я получаю 1.

Не могли бы вы пересмотреть мой код?

int main(void) {
  int input = 0;
  int diff = 50;
  int output = 0;

  printf("Input: \n");
  do {
    scanf("%d", &input);
    if (input < diff) {
      diff -= input;

    } else if (diff == input) {
      diff = 50;
      output++;
    } else {
      diff = 50 - input;
      output++;
    }

  } while (input != -1);

  printf("Output: %d", output);

  return 0;
}

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Как я уже упоминал в комментариях, вы прочитали input один раз в начале в l oop и сравните его с -1 в конце в l oop, поэтому -1 будет обрабатываться так же, как и любое другое значение input.

Очевидный вариант - читать в двух разных местах: один раз перед l oop и один раз на конец l oop, таким образом вы получите новое input значение непосредственно перед вашим условием l oop:

printf("Input: \n");
scanf("%d", &input);
while(input != -1) {
    // Processing
    scanf("%d", &input);
} 

Обратите внимание, что я также переключил l oop на while l oop вместо do ... while l oop, как если бы входные данные only содержали -1, тогда do ... while все равно обработал бы его , что приводит к неправильному выводу.


Вы также не принимаете во внимание, что пакет может быть неполным в конце вашего l oop, это можно решить, проверив, если вы у вас есть бесчисленный пакет после вашего l oop:

printf("Input: \n");
scanf("%d", &input);
while(input != -1) {
    // Processing
    scanf("%d", &input);
} 
if(diff != 50) {
    output++;
}
0 голосов
/ 07 апреля 2020

Убедитесь, что не используете «-1» как часть обработанных данных.

Также взгляните на ваш алгоритм.

Может быть что-то вроде этого:

#include <stdio.h>

int main(void) {
  int input = 0;
  int load = 50;
  int output = 0;

  printf("Input: \n");
  while (1) {
    if (scanf("%d", &input) != 1 || input > 50)
    {
        // Illegal input
        exit(1);
    }
    if (input == - 1)
    {
        // Done
        break;
    }

    if (load + input > 50)
    {
        ++output;  // Take new package
        load = 0;  // make it empty
    }

    load += input; // Put into package
  };

  printf("Output: %d", output);

  return 0;
}
...