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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2013, 18:12   #1
akademochka
Пользователь
 
Регистрация: 06.11.2011
Сообщений: 44
По умолчанию Зацыкливание

Код:
int main()
{int a,b,i;
scanf("%d %d",&a,&b);
i=0;
    while(a!=0||b!=0)
    {i++;
    if(a<b){a=a+2*a;
    b=b-a;
    continue;
    }
    
    else {a=a-b;
    b=b+2*b;
            }
            
                     }
    printf("%d",i);
    system("PAUSE");
    return 0;
}
Почему не работает? Подскажите
akademochka вне форума Ответить с цитированием
Старый 16.03.2013, 18:55   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Почему не работает? Подскажите
потому что код не отформатирован
rrrFer вне форума Ответить с цитированием
Старый 16.03.2013, 18:56   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Потому что зацикливается
Мы не можем сказать, почему не работает, на зная алгоритма, который Вы запрограммировали.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.03.2013, 19:01   #4
akademochka
Пользователь
 
Регистрация: 06.11.2011
Сообщений: 44
По умолчанию

Есть две коробки. В первой находится a шаров, во второй b (0 < a + b < 2147483648). Шары разрешается перекладывать из одной коробки в другую. Причем перекладывать в любую из коробок можно только столько шаров, сколько в ней находится. Необходимо определить, можно ли все шары сложить в одну коробку.
akademochka вне форума Ответить с цитированием
Старый 16.03.2013, 19:01   #5
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

на вот отформатировал и чуть добавил:
Код:
#include <cstdio>
int main() {
  int a, b, i;

  scanf("%d %d", &a, &b);
  
  i = 0;
  while (a || b) {
    printf("a(%d), b(%d)\n", a, b);
    i++;
    if (a < b) {
      a = a + 2 * a;
      b = b - a;
      continue;
    }
    else {
      a = a - b;
      b = b + 2 * b;
    }
  }
  
  printf("%d", i);
}
запускай и смотри че выводица:
Цитата:
a(0), b(9)
a(0), b(9)
a(0), b(9)
a(0), b(9)
a(0), b(9)
a(0), b(9)
a(0), b(9)
a(0), b(9)
При a = 0, b = 9 выполняется вот этот кусок:
Код:
a = a + 2 * a;
      b = b - a;
      continue;
и он не изменяет значений a и b, потому и зацикливается.

Как говорила одна мудрая печка из кинофильма "что сготовил - то и кушай"
rrrFer вне форума Ответить с цитированием
Старый 16.03.2013, 19:08   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Во-первых, continue не нужен в данном коде (ну это мелкое замечание).
Во-вторых, с таким условием цикл? Вопрос стоит "можно или нельзя". В случае, когда "нельзя", такой цикл (цикл перекладывания) будет крутиться вечно.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 16.03.2013 в 19:25.
BDA вне форума Ответить с цитированием
Старый 16.03.2013, 19:12   #7
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Зацыкливание
Политически, этим всё сказано.
Простите, троль поснулся, ИМХО. Я не виноват.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 16.03.2013, 19:16   #8
akademochka
Пользователь
 
Регистрация: 06.11.2011
Сообщений: 44
По умолчанию

я еще не дошла до той части, где можно или нельзя. Я подзадачу хочу решить, где только можно
если вводим 2 и 6 выводить должно 2(это один с тестов)
akademochka вне форума Ответить с цитированием
Старый 16.03.2013, 19:19   #9
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
если вводим 2 и 6 выводить должно 2(это один с тестов)
почему 2?
Цитата:
Необходимо определить, можно ли все шары сложить в одну коробку.
выводить согласно вашему условию должно true или false
rrrFer вне форума Ответить с цитированием
Старый 16.03.2013, 19:21   #10
akademochka
Пользователь
 
Регистрация: 06.11.2011
Сообщений: 44
По умолчанию

Входные данные

Каждая строка содержит два целых числа a и b, разделенных пробелом.

Выходные данные

Для каждого теста в отдельной строке вывести количество перекладываний, необходимое для того чтобы все шары находились в одной коробке, или -1, если это сделать невозможно.
akademochka вне форума Ответить с цитированием
Ответ


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