Форум программистов, компьютерный форум CyberForum.ru

Помoгите доделать задaчку - C++

Восстановить пароль Регистрация
 
Songe
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 7
23.12.2011, 10:59     Помoгите доделать задaчку #1
Вот условия:
********/index.asp?main=task&id_task=543

Или:

В N корзинах находятся золотые монеты. Корзины пронумерованы числами от 1 до N. Во всех корзинах, кроме одной, монеты весят по w граммов. В одной корзине монеты фальшивые и весят w–d граммов. Волшебник берет 1 монету из первой корзины, 2 монеты из второй корзины, и так далее, и, наконец, N-1 монету из (N-1)-й корзины. Из N-й корзины он не берет ничего. Он взвешивает взятые монеты и сразу указывает на корзину с фальшивыми монетами.

Требуется написать программу, которая выполняет это волшебство.

Входные данные:
Входной файл INPUT.TXT содержит четыре целых числа: N, w, d и P – суммарного веса отобранных монет (2 ≤ N ≤ 8000, 1 ≤ d < w ≤ 30).
Выходные данные:
В выходной файл OUTPUT.TXT выведите номер корзины с фальшивыми монетами.



Кажется правильно решил, но возникает ошибка на 6 тесте тут ********
помогите дописать

Моё решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void main()
{
   FILE *bufi,*bufo;
   long int N,n,w,d,P,s,f;
   bufi = fopen("input.txt", "r");
   fscanf(bufi,"%ld %ld %ld %ld",&N,&w,&d,&P);
   bufo=fopen("output.txt", "w");
   n=N-1;
   s=((1+n)/2)*n*w-P;
   f=s/d;
   if(s==0)
     fprintf(bufo, "%ld",N );
        else
            if(w-d==1)
              fprintf(bufo,"%ld",s);
                    else
                        fprintf(bufo,"%ld",f);
 
   fclose(bufi);
   fclose(bufo);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2011, 10:59     Помoгите доделать задaчку
Посмотрите здесь:

C++ Класс круговая очередь Помoгите плз
Ошибку помoгите найти C++
C++ не могу доделать.
Помoгите преобразовать программу! C++
C++ Помoгите найти ошибку в коде!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
23.12.2011, 12:04     Помoгите доделать задaчку #2
Цитата Сообщение от Songe Посмотреть сообщение
s=((1+n)/2)*n*w
откуда эта формула? она не работает. Пусть i - номер корзины, http://www.cyberforum.ru/cgi-bin/latex.cgi?x_{i} - масса настоящих монет в i - той корзине, http://www.cyberforum.ru/cgi-bin/latex.cgi?\alpha - разница масс настоящей и фальшивой монет. Решение http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{\left(\sum_{i = 1}^{N - 1}x_{i} \right) - P}{\alpha}, http://www.cyberforum.ru/cgi-bin/latex.cgi?x_{i}=w*i если ответ = 0, то фуфло в последней корзине, иначе фуфло в корзине с номером ответ.
Songe
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 7
23.12.2011, 18:19  [ТС]     Помoгите доделать задaчку #3
Цитата Сообщение от alkagolik Посмотреть сообщение
откуда эта формула? она не работает. Пусть i - номер корзины, http://www.cyberforum.ru/cgi-bin/latex.cgi?x_{i} - масса настоящих монет в i - той корзине, http://www.cyberforum.ru/cgi-bin/latex.cgi?\alpha - разница масс настоящей и фальшивой монет. Решение http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{\left(\sum_{i = 1}^{N - 1}x_{i} \right) - P}{\alpha}, http://www.cyberforum.ru/cgi-bin/latex.cgi?x_{i}=w*i если ответ = 0, то фуфло в последней корзине, иначе фуфло в корзине с номером ответ.
эта формула - арифметическая прогрессия, умноженная на массу обычной монеты и ещё минус вес всех отобранных монет. "s" Это как ваше "Xi - P", a "альфа" - это и есть "d" , а "f" это ваш ответ, и про последнюю корзину я написал
Так что эта формула ещё как работает =)


Всё ещё нужна помощь
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
24.12.2011, 04:55     Помoгите доделать задaчку #4
Цитата Сообщение от Songe Посмотреть сообщение
Так что эта формула ещё как работает =)
я бы не отвечал так если бы не проверил программно и на бумаге. Сумма первых n членов арифметической прогрессии
http://www.cyberforum.ru/cgi-bin/latex.cgi?S_{n}= \sum_ {i = 1}^{n}x_{i}=n\frac{2x_{1} +d(n - 1)}{2}, де d - шаг прогрессии. Может так будет понятней...

Добавлено через 12 минут
суммируем сколько должно быть массы, от этого отнимаем фактическую массу, результат делим на разницу масс.
Yandex
Объявления
24.12.2011, 04:55     Помoгите доделать задaчку
Ответ Создать тему
Опции темы

Текущее время: 01:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru