Почему разные целочисленные объявления меняют результаты? - PullRequest
0 голосов
/ 24 сентября 2019

Проблема существует в первом вложенном цикле, где результаты не выходят, как ожидалось, я работаю над CodeBlocks 17.12

Что я сделал, чтобы попытаться решить проблему, это изменить "int s[n] "to" long long s [n] ", и это сработало хорошо, но, к сожалению, для других входных данных мне нужно вернуть его" int s [0] ", чтобы оно работало хорошо.

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    int n;
    do
    {
       cin >> n;
    }
    while (n < 1 || n > pow(10, 5));
    int s[n];
    int m = 0;
    //Inputs number of friends in each group.
    for (int i = 0; i < n; i++)
    {
        do
        {
            cin >> s[i];
        }
        while (s[i] < 1 || s[i] > 4);
        if (s[i] == 4)
        {
            m++;
            s[i] = 0;
        }
        else
        {
            /* Hold each number of members in the groups and add them to the rest numbers to check if it would be equal to 4 then
            if two numbers equal to 4, both numbers will be 0s. */
            for (int a = 0; a < n; a++)
            {
                if (a != i)
                {
                    if (s[i] + s[a] == 4)
                    {
                        m++;
                        s[i] = 0;
                        s[a] = 0;
                    }
                }
            }
        }
    }
    cout << m << endl;
}

}

ввод "78 2 2 2 2 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 3 2 2 2 2 2 22 1 1 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 "Как 78 в первой строке, а остальные - во второй.Ожидаемый результат: 38 [когда «long long s [0] работает хорошо»] Результат: 39 [когда «int s [0]» дает этот результат] Это проблема, если я плохо объяснил в коде: https://codeforces.com/contest/158/problem/B

1 Ответ

0 голосов
/ 24 сентября 2019

Размер массива должен быть от 1 до 100000. Исходя из введенных пользователем данных при создании массива.

        do
        {
            cin >> n;
        } 
        while (n < 1 || n > pow(10, 5));

Во время выполнения кода я получаю сообщение об ошибке В этом коде long long s[n];, поскольку n должно бытьпостоянное значение.поэтому я изменил этот код.

Решение:

long long* s = new long long(n);

После создания массива.Вы принимаете вход от пользователя для хранения массива.это значение находится между 1 to 4 вашим проверяющим множественным условием.

  1. , если заданное значение равно 4, тогда m++ и s[i] = 0 или
  2. в другой части заданного значения + массивпроверить, равно ли это значение 4, присвоить s[i] и s[a] =0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...