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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2009, 20:11   #1
andrey_94
 
Регистрация: 26.08.2009
Сообщений: 9
По умолчанию Еще одна задачка.

Здравствуйте, это снова я и снова не получается решить задачу...

N пиратам удалось справедливо разделили клад из M золотых монет - каждый получил свою часть согласно своему пиратскому рангу и стажу. Самый молодой пират взял A монет, а каждый следующий пират брал на одну монету больше, чем предыдущий его коллега. Последним был капитан, которому досталось вдвое больше от запланированного, очевидно, что после него монет больше не осталось.
Сколько было пиратов вместе с капитаном, если известны A и M.
Так как капитан без команды просто пират, то N > 1.


Технические условия
Во входном файле два натуральных числа A и M.
Входные числовые значения корректны. (1<=A<=100, M<15150).
В выходной файл нужно записать количество пиратов N.

Вот мои нароботки:

PHP код:
#include <iostream>
using namespace std;
int main()
{
    
int anm;
    
cin >> >> m;

    for (
1<= mn++)
    {
    
1;
    }

    
cout <<<<endl;


andrey_94 вне форума Ответить с цитированием
Старый 19.12.2009, 20:54   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Хм... В ваше условие в цикле нужно добавить еще одно альтернативное условие. У вас же сказано - капитан получил вдвое больше монет, чем должен был. Значит ваш цикл будет выглядеть примерно так
Код:
int total = m;
for (n = 1; a <= m || m == a*2; n++) 
{ 
    a += 1;
    m -= a;
}
MaTBeu вне форума Ответить с цитированием
Старый 19.12.2009, 21:23   #3
andrey_94
 
Регистрация: 26.08.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от MaTBeu Посмотреть сообщение
Хм... В ваше условие в цикле нужно добавить еще одно альтернативное условие. У вас же сказано - капитан получил вдвое больше монет, чем должен был. Значит ваш цикл будет выглядеть примерно так
Код:
int total = m;
for (n = 1; a <= m || m == a*2; n++) 
{ 
    a += 1;
    m -= a;
}
Этот код не работает....

Код:
#include <iostream>
using namespace std;
int main()
{
    int a, n, m;
    cin >> a >> m;

int total = m;
for (n = 1; a <= m || m == a*2; n++) 
{ 
    a += 1;
    m -= a;
}


    cout <<n <<endl;

}
точнее работает но не так как надо... я когда ввожу значения 5 25 то должен получать 3, а так получаю 4
http://www.e-olimp.com/problems/75

Последний раз редактировалось MaTBeu; 22.12.2009 в 17:58.
andrey_94 вне форума Ответить с цитированием
Старый 22.12.2009, 13:19   #4
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

может я и неправа, но 1) нужно считать сумму забранных монет, как сумму а+, т.к. 1-й взял а, второй а+1, и т.д. Счет вести до тех пор когда количество оставшихся монет, т.е. m-cумма а+, будет делиться на 2 без остатка и будет на 1 больше а+i.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 22.12.2009, 13:49   #5
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Вот что получилось. может можно что-то упростить.
Код:
#include <iostream>
#include <conio>
using namespace std;
int main()
{
int a, n, m, s=0,k;
bool fl=false;
cin >> a >> m;
s=a;
int total = m;

for (n = 2;!fl;n++)
{
a += 1;
s+=a;
//cout<<"a"<<a<<endl;
//cout<<"s"<<s<<endl;
if ((m-s)%2==0)
 {
 k=a+1;
 if((m-s)/2==k)
  fl=true;
  }
}
cout <<n <<endl;
getch();
}
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 22.12.2009, 15:10   #6
mato
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 57
По умолчанию

помоему должно бить так
но ищо надо доделать
#include <iostream>
using namespace std;


void main()
{
int n,m,a,result;
cin >> m;
cin >> a;
n=0;
for(m;m>=a;m-a)
{
a=a*2;
n++;
}
result = n;
cout << result<<endl;
}
mato вне форума Ответить с цитированием
Старый 23.12.2009, 12:58   #7
Lunex.08
Форумчанин
 
Аватар для Lunex.08
 
Регистрация: 25.02.2009
Сообщений: 145
По умолчанию

Цитата:
помоему должно бить так
но ищо надо доделать
#include <iostream>
using namespace std;


void main()
{
int n,m,a,result;
cin >> m;
cin >> a;
n=0;
for(m;m>=a;m-a)
{
a=a*2;
n++;
}
result = n;
cout << result<<endl;
}
А почему в каждой итерации цикла for вы а УМНОЖАЕТЕ на 2?Сдесь же сказано что увеличивается на 1 монету.У вас же получается что каждый следующий пират берет в 2 раза больше монет чем предыдущий.Тем более после каждой итерации надо проверять на то,делится ли оставшееся кол-во монет на кол-во монет,которое взял последний пират с остатком 2.И все это время увеличивать значение переменной,хранящей кол-во пиратов на 1.
Компьютеры бесподобны: за несколько минут они могут совершить такую грандиозную ошибку, какую не в состоянии сделать множество людей за многие месяцы.

Последний раз редактировалось Lunex.08; 23.12.2009 в 13:09.
Lunex.08 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
еще одна задачка на TP7 Disel Паскаль, Turbo Pascal, PascalABC.NET 5 20.01.2009 16:24
Еще одна задачка по JavaScript) artemavd JavaScript, Ajax 1 20.11.2008 17:55
еще одна задачка koston Помощь студентам 4 09.04.2008 18:43
Еще одна маленькая задачка в Excel Vinni_puh Microsoft Office Excel 1 18.02.2008 01:49
еще одна задача в BP Jasper Паскаль, Turbo Pascal, PascalABC.NET 2 05.12.2006 15:13