Неправильное количество итераций в цикле for. Также получается неожиданный вывод

0

Проблема Codeforces 160A- http://codeforces.com/problemset/problem/160/A

Я получаю либо 1, либо 2 как результат для всех тестовых примеров. Я думаю, это потому, что цикл for в конце решения работает только один или два раза. Я не могу определить, почему цикл заканчивается после почти 2 итерации. Что не так с моим решением.

Мое решение:

#include<iostream>
using namespace std;


int total(int x,int y,int array[100]) //Function to calculate sum of xth to yth term of array.
{
    int z=0;

    for(int a=x;a<=y;a++)
    {
        z+=array[a];
    }

    return z;
}

int main()
{
    int n,coin[],sum1,sum2,i,j,a,temp,noofcoins;

    cin>>n;

    for(i=0;i<n;i++)
    cin>>coin[i];

    for(i=0;i<n;i++) //Bubble sorting array in descending order.
    {
        for(j=0;j<n-i-1;j++)
        {
            if(coin[j]<coin[j+1])
            {
                temp=coin[j];
                coin[j]=coin[j+1];
                coin[j+1]=temp;
            }
        }
    }

    noofcoins=0;
    sum1=0;
    sum2=0;

    for(i=0;((i<n)&&(sum1<=sum2));i++)
    {
        sum1+=coin[i];
        sum2=total(i+1,n,coin);
        ++noofcoins;
    }

    cout<<noofcoins;
}
  • 0
    Вы можете использовать std::sort и std::accumulate .
  • 1
    Вы объявили i глобальной переменной, а затем вы используете ее в двух местах, и это, безусловно, вызывает проблемы.
Теги:
loops

5 ответов

1
Лучший ответ

Во-первых, избегайте использования глобальных переменных. Это выражение принадлежит основному органу

int n,coin[100],sum1,sum2,i,j,temp,noofcoins;

Как только вы исправите его, вы заметите, что переменная i используемая в total функций, такая же, как и в main. Просто инициализируйте его в for.

for(int i=x;i<y;i++)

Тогда условие в финале для неверно. Должен быть:

for(i=0;((i<n)&&(sum1<=sum2));i++)
1

Вы определили i как глобальную переменную. Вы используете i как в total функций, так и в main где вы используете i для цикла, где вы называете total. Поэтому после того, как вы назвали total, i стал другим значением, и цикл в main закончится.

1

U объявили я как глобальную переменную, а затем u используют ее в двух местах, а затем, что, безусловно, вызывает проблемы

0

1 - нет причин объявлять переменные глобально, лучше объявить их в своей основной функции().

2 - Ваш способ сортировки пузырьков кажется неправильным. Правильный способ - сортировать пузырь до тех пор, пока не потребуется замена.

bool flag=flase;
while (!flag){
    flag=true;
    for(i=0;i<n-1;i++){ //Bubble sorting array in descending order.
        if (coin[i]<coin[i+1]){
            temp=coin[i];
            coin[i]=coin[i+1];
            coin[i+1]=temp;
            flag=false;
        }
    }
}

3 - неправильный способ передачи массива в функцию. Прочтите деталь "Массивы как параметры" на этой странице для правильного пути.

4. Наконец, вы можете использовать "новую" функцию для создания своего массива. Таким образом, он не будет ограничен максимальным размером массива 100, а также не будет терять память, когда ваш массив меньше 100.

Читайте здесь, чтобы научиться использовать "новую" функцию.

0

следующие могут помочь:

int twin(std::vector<int> coins)
{
    std::sort(coins.begin(), coins.end());
    const int total = std::accumulate(coins.begin(), coins.end(), 0);
    int left = total;
    int right = 0;
    for (size_t i = 0; i != coins.size(); ++i)
    {
        const int value = coins[coins.size() - 1 - i];
        left -= value;
        right += value;
        if (right > left) {
            return 1 + i;
        }
    }
    return 0;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню