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

объсните принцип работы - C++

Восстановить пароль Регистрация
 
Antoniy777
1 / 1 / 0
Регистрация: 18.11.2010
Сообщений: 12
18.11.2010, 21:22     объсните принцип работы #1
Объясните кому не сложно принцип работы данной программы
Планируется переписывание на паскале
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <fstream>
 
using namespace  std;
 
int main()
{
    ifstream in("INPUT.TXT");
    ofstream out("OUTPUT.TXT");
    int X,Y;
    in>>X>>Y;
    int Cx=1,Cy=1,Year=X-2;
    while(--Year)
    {
        int tmp=Cx+Cy;
        Cx=Cy;
        Cy=tmp;
    }
    int x,y=0;
    do 
    {
        int numerator=Y-y*Cy;
        x=numerator/Cx;
        if(numerator%Cx)continue;
        out<<x<<' '<<y<<endl;
    } while (y++<=x);
    return 0;
}
Вот условие к данной задаче:
Билли Бонс положил в сундук некоторое количество золотых монет. На второй год он вынул из сундука сколько-то монет. Начиная с третьего года, он добавлял столько монет, сколько было в сундуке два года назад.

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

Входной файл INPUT.TXT содержит натуральные числа X и Y (3 <= X <= 20, 1 <= Y <= 32767).
Выходные данные

В выходной файл OUTPUT.TXT выведите через пробел количество монет в первый и второй года. Гарантируется, что решение задачи всегда существует.
Пример
№ INPUT.TXT OUTPUT.TXT
1 6 25 5 2

Пояснение к примеру
Если в первый год положить 5 монет, а во второй год вынуть 3 монеты, то начиная с первого года в сундуке будет 5, 2, 7, 9, 16, 25, ... монет.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2010, 21:22     объсните принцип работы
Посмотрите здесь:

C++ Принцип работы рекурсии
C++ LZSS принцип работы алгоритма
Принцип работы конструктора C++
Принцип работы switch C++
C++ Принцип работы программы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
18.11.2010, 22:20     объсните принцип работы #2
Код очень криво написан, вряд ли работает, читает что-то из файла, шаг в сторону - программа вылетает.
Что-то суммирует, при чем делает это очень криво и нерационально, очень много UB. Принцип, по которому была написана эта программа - лишь бы скомпилировалось.

Добавлено через 32 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <fstream>
#include <iostream>
#include <cstdlib>
 
int main()
{
    std::ifstream in("INPUT.TXT");
    std::ofstream out("OUTPUT.TXT");
    int X, Y;
    if (!in)
        std::cout << "File INPUT.TXT not found";
    in>>X>>Y;
    int Cx = 1, Cy = 1, Year = X - 2;
    while (Year-- > 0)
    {
        Cy += Cx;
        Cx = Cy - Cx;
    }
    int numerator = Y, x, y = 0;
    do
    {
        x = numerator / Cx;
        if (!(numerator % Cx))
            out << x << ' ' << y << std::endl;
        numerator -= Cy;
    } while (y++ <= x);
    return 0;
}
Antoniy777
1 / 1 / 0
Регистрация: 18.11.2010
Сообщений: 12
18.11.2010, 22:24  [ТС]     объсните принцип работы #3
А можешь рассказать как она работает а то я в C++ вобще ничего не знаю, я просто нашел задачу которая мне нужна только на C++ а не на паскале, и сейчас хочу переписать её на Паскаль
kle0fas
6 / 6 / 1
Регистрация: 25.02.2010
Сообщений: 12
19.11.2010, 11:02     объсните принцип работы #4
первый цикл находит x-ое и (x-1)-ое число Фибоначчи, а что делает второй не совсем понятно.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.11.2010, 15:51     объсните принцип работы #5
Попробую объяснить сам алгоритм:

Цитата Сообщение от Antoniy777 Посмотреть сообщение
Пояснение к примеру
Если в первый год положить 5 монет, а во второй год вынуть 3 монеты, то начиная с первого года в сундуке будет 5, 2, 7, 9, 16, 25, ... монет.
Сначало у нас есть число x и число y (в данном случае это 5 и 2).
x+y= 1x+1y
Далее числа будут такие:
x+y+y= 1x+2y
x+y+y+x+y= 2x+3y
x+y+y+x+y+x+y+y= 3x+5y
x+y+y+x+y+x+y+y+x+y+y+x+y= 5x+8y
и т.д. (посмотрите как изменяется коэффиценты у x и y по годам)
Вот зачем здесь нужны числа Фибоначчи.
Здесь вычисляются два числа Фибоначчи, которые будут соответствовать коээфициентам перед x и y:
C++
1
2
3
4
5
6
           while(--Year)
        {
                int tmp=Cx+Cy;
                Cx=Cy;
                Cy=tmp;
        }
А здесЬ:
C++
1
2
3
4
5
6
7
           do 
        {
                int numerator=Y-y*Cy;
                x=numerator/Cx;
                if(numerator%Cx)continue;
                out<<x<<' '<<y<<endl;
        } while (y++<=x);
просто идет подбор y (начиная с 0), и проверяется может ли при таком y существовать x.
Yandex
Объявления
19.11.2010, 15:51     объсните принцип работы
Ответ Создать тему
Опции темы

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