Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2012, 02:30   #1
InKo1
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 18
По умолчанию Задача - куча камней.

http://acm.timus.ru/problem.aspx?space=1&num=1005
Результат компиляции - Wrong answer
Код:
#include<iostream>
using namespace std;

int main()
    {
        int N;
        cin >> N;
        if(N > 20 || N <= 1)
            return 0;
        else
            {
                int* W = new int[N];
                int j = 0;
                while (cin >> *(W + j))
                    {
                        j++;
                        if(j > N - 1)
                            break;
                        if(*W > 100000 || *W < 1)
                            return 0;
                    }
                int buf;
                for(int j = 0; j < N; j++)
                    for(int i = 0; i < N - 1; i++)
                        {
                            if(*(W + i) < *(W + i + 1))
                                 {
                                     buf = *(W + i);
                                     *(W + i) = *(W + i + 1);
                                     *(W + i + 1) = buf;
                                 }

                        }
                int sum1 = 0, sum2 = 0, i = 0;
                while(true)
                    {
                        sum1 += *(W + i);
                        while(sum1 > sum2)
                            {
                                i++;
                                if(i > N - 1)
                                    break;
                                sum2 += *(W + i);
                            }
                        i++;
                        if(i > N - 1)
                            break;
                    }
                int razn;
                if(sum1 > sum2)
                    razn = sum1 - sum2;
                else
                    razn = sum2 - sum1;
                cout << razn;
            }
        return 0;
    }
InKo1 вне форума Ответить с цитированием
Старый 04.01.2012, 03:12   #2
NoMasters
Новичок
Джуниор
 
Регистрация: 09.11.2011
Сообщений: 2
По умолчанию

Первое, что попалось: зачем вы при вводе постоянно проверяете значение первого элемента? Вообще запись вида W[idx] религия использовать не позволяет?
NoMasters вне форума Ответить с цитированием
Старый 04.01.2012, 03:22   #3
InKo1
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 18
По умолчанию

Мне надо, что бы в массиве было заданное мною кол - во элементов, а их компилятор позволяет делать это только так.
InKo1 вне форума Ответить с цитированием
Старый 04.01.2012, 07:18   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

как понять: Результат компиляции - Wrong answer ?
_Bers вне форума Ответить с цитированием
Старый 04.01.2012, 07:31   #5
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
как понять: Результат компиляции - Wrong answer ?
Скорее читать как
Цитата:
Результат теста- Wrong answer
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 04.01.2012, 08:00   #6
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
Скорее читать как
Согласно задаче, алгоритм делает именно то, что нужно.
Требования к задаче (время исполнения) не корректны, ибо ввод данных с клавиатуры не зависит от самого алгоритма, но потребляет 99,(9) всего затрачиваемого времени.
_Bers вне форума Ответить с цитированием
Старый 04.01.2012, 08:06   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от InKo1 Посмотреть сообщение
Мне надо, что бы в массиве было заданное мною кол - во элементов, а их компилятор позволяет делать это только так.
Познакомься, это - твой код. Без изменений:
Я лишь заменил обращение к элементам массива, в более удобочитаемый вариант, избежав этой дикой адресации: начало массива + смещение. Ужс.

Код:
int main()
{
    int N; cin >> N;
    if(N > 20 || N <= 1)   { return 0; } 
    else
    {
        int* W = new int[N];
        int j = 0;
        while (cin >> W[j] )
        {
            j++;
            if(j > N - 1) { break; }
            if(W[0] > 100000 || W[0] < 1){ return 0; }
        }


        int buf;
        for(int j = 0; j < N; ++j)
        {
            for(int i = 0; i < N - 1; ++i)
            {
                if( W[i] < W[i+1] ) { buf = W[i]; W[i]= W[i+1];  W[i+1] = buf; }
            }
        }
            int sum1 = 0, sum2 = 0, i = 0;
            while(true)
            {
                sum1 += W[i];
                while(sum1 > sum2)
                {
                    i++;
                    if(i > N - 1) { break; }
                    sum2 += W[i];
                }
                i++; if(i > N - 1){ break;}
            }
            int razn;
            if(sum1 > sum2) { razn = sum1 - sum2;}
            else { razn = sum2 - sum1; }
            cout << razn;
    }
    return 0;
}
/ps у тебя утечка памяти. Напачкала, а убираться кто будет?
_Bers вне форума Ответить с цитированием
Старый 04.01.2012, 08:54   #8
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Оу, да тут ещё есть люди которые решают задачи на Тимусе
Хотите решение? У меня эта задача сдана.
_-Re@l-_ вне форума Ответить с цитированием
Старый 04.01.2012, 09:05   #9
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
Оу, да тут ещё есть люди которые решают задачи на Тимусе
Хотите решение? У меня эта задача сдана.
Да, на кой твоё решение сдалось.
Ты не решение, ты идею скажи.
_Bers вне форума Ответить с цитированием
Старый 04.01.2012, 10:43   #10
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Да, на кой твоё решение сдалось.
Ты не решение, ты идею скажи.
+1(10 символов)
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Куча программ! VintProg Софт 2 30.05.2010 12:53
куча skymaster Общие вопросы Delphi 1 21.05.2009 11:38
Куча вопросов vilini Работа с сетью в Delphi 1 18.08.2008 11:56