Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
xGoooDx
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 29
1

Алгебраическая сумма

29.09.2015, 12:53. Просмотров 4386. Ответов 19
Метки нет (Все метки)

Всем добрый день.
Есть формула http://www.cyberforum.ru/cgi-bin/latex.cgi?x = n1/\sum A, где n1=1, A-некоторые значения.
Как записать эту формулу на языке C++?
Подскажите пожалуйста.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2015, 12:53
Ответы с готовыми решениями:

Алгебраическая сумма ряда 1/k^5
Дано натуральное число n. вычислить \sum_{k=1}^{n}\frac{1}{k^5} Возникла проблема, код...

Алгебраическая сумма. Ошибки в коде
Дано натуральное число n. вычислить \sum_{k=1}^{n}\frac{1}{k^5} Подправьте пожалуйста с код. ...

Двойная алгебраическая сумма (сигма)
Есть условие: y=\sum_{i=1}^{n-1} \sum_{j=1}^{n-1} x/(i+j) И есть код: #include <cstdlib> #include...

Не выполняется алгебраическая операция
Привет всем. Помогите найти ошибку. Описывать само задание проги не буду, напишу вкратце. Вводим...

Определить длину вектора Х, если х1 - сумма элементов матрицы A, х2 - сумма элементов матрицы B, х3 - сумма С
Заданны три квадратные матрицы A, B, C. Определить длину вектора Х (х1, х2, х3), если х1 - сумма...

19
UltraPenguin
230 / 96 / 27
Регистрация: 20.03.2014
Сообщений: 304
Завершенные тесты: 1
29.09.2015, 13:15 2
Лучший ответ Сообщение было отмечено xGoooDx как решение

Решение

C++
1
2
3
4
5
6
7
double mass[100];
/*заполнение массива. Массив - это твои "некоторые значения А"*/
/*после заполнения выполняем расчет суммы:*/
double sum = 0;
for (int i = 0; i < 100; ++i)
   sum += mass[i];
double x = 1. / sum;
1
экспонат
0 / 0 / 0
Регистрация: 03.08.2015
Сообщений: 42
29.09.2015, 13:19 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
//--------------------------------------------------------------------------
int main()
{ double  n1=1, x, mas_of_A[100],a,f=0;
cout<<"How many A-nums will you count?\n";
cin>>a;
cout<<"Enter A-nums: \n";
for (int i=0; i<a; i++)
{cin>>mas_of_A[i];
f=f+mas_of_A[i];}
x=n1/f;
cout<<"X = "<<x;
getch ();
        return 0;
}
0
UltraPenguin
230 / 96 / 27
Регистрация: 20.03.2014
Сообщений: 304
Завершенные тесты: 1
29.09.2015, 13:23 4
экспонат, вы бы хоть отформатировали чуток.
0
29.09.2015, 13:23
xGoooDx
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 29
29.09.2015, 14:29  [ТС] 5
Спасибо Вам большое за помощь!

Добавлено через 31 минуту
Попробовал внести это в основной код, но выдает теперь ответ бесконечность
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main()
{
    int N, Na, Nb, i, A1, A2,n1=1,k,n;
    double sum1 = 0, sum2 = 0;       // sum1 - is sum of all time spending on operation by ALL A-type robots ,sum2- ... of B-type
    cout << "Enter number of details: \n";
    do
    {
        cin >> N;
    } while (N < 1 || N > 100000);                             //  Number of details
 
                                                               ///////////////////////////////////////////////////////////////////////////////////////////////////
                                                               //     A-type
    cout << "Enter number of robots A: \n";
    do
    {
        cin >> Na;
    } while (Na < 1 || Na > 1000);                        //  Robots to perform first operation
                                                          //Spending time by A-type robot on performing an operation
 
    for (i = 0; i < Na; i++)
    {
        do
        {
            cout << "Enter time to produce detail by robot A[" << i + 1 << "]: ";
            cin >> A1;
        } while (A1 < 1 || A1 > 100);
        double mass[1000];
        double A1 = 0;
        for (int k = 0; k < 100; ++k)
            A1 += mass[k];
        double sum1 = 1 / A1;
            
            
    }
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    //B-type
 
    cout << "Enter number of robots B: \n";
    do
    {
        cin >> Nb;
    } while (Na < 1 || Nb > 1000);                    //  Robots to perform second operation
                                                      //Spending time by B-type robot on performing an operation
    for (i = 0; i < Nb; i++)
    {
        do
        {
            cout << "Enter time to produce detail by robot B[" << i + 1 << "]: ";
            cin >> A2;
        } while (A2 < 1 || A2 > 100);
        double mass[1000];
        double A2 = 0;
        for (int l = 0; l < 100; ++l)
            A2 += mass[l];
        double sum2 = 1 / A2;
    }
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    cout << "Total: " << N / sum1 + N / sum2;                          // System time
     
}
И вот само задание:За какое минимальное время роботы смогут обработать данное количество деталей?
Ну никак не получается!
0
UltraPenguin
230 / 96 / 27
Регистрация: 20.03.2014
Сообщений: 304
Завершенные тесты: 1
29.09.2015, 14:38 6
Во-первых, не объявляйте переменные внутри циклов! Это может существенно снизить скорость работы программы.
Во-вторых:
C++
1
2
3
4
double mass[1000]; //Объявить объявили, а присвоить нужные значения в количестве 1000 штук?
double A1 = 0;
for (int k = 0; k < 100; ++k) //Массив на 1000 элементов, а цикл проходит только по первой сотне.
   A1 += mass[k]; //Т.к. вы не присвоили нужных значений элементам массива (см.выше) то сейчас вы суммируете абсолютно рандомные значения, что согласитесь не найс.
Исправьте это, пойдем далее.
1
xGoooDx
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 29
29.09.2015, 14:52  [ТС] 7
Переменные объявил вначале и изменил ко-во элементов.
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main()
{
    int N, Na, Nb, i, A1, A2,n1=1,k,n;
    double sum1 = 0, sum2 = 0,A1 = 0,A2 = 0;       // sum1 - is sum of all time spending on operation by ALL A-type robots ,sum2- ... of B-type
    cout << "Enter number of details: \n";
    do
    {
        cin >> N;
    } while (N < 1 || N > 100000);                             //  Number of details
 
                                                               ///////////////////////////////////////////////////////////////////////////////////////////////////
                                                               //     A-type
    cout << "Enter number of robots A: \n";
    do
    {
        cin >> Na;
    } while (Na < 1 || Na > 1000);                        //  Robots to perform first operation
                                                          //Spending time by A-type robot on performing an operation
 
    for (i = 0; i < Na; i++)
    {
        do
        {
            cout << "Enter time to produce detail by robot A[" << i + 1 << "]: ";
            cin >> A1;
        } while (A1 < 1 || A1 > 100);
        double mass[100];
        for (int k = 0; k < 100; ++k)
            A1 += mass[k];
        double sum1 = 1 / A1;
            
            
    }
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    //B-type
 
    cout << "Enter number of robots B: \n";
    do
    {
        cin >> Nb;
    } while (Na < 1 || Nb > 1000);                    //  Robots to perform second operation
                                                      //Spending time by B-type robot on performing an operation
    for (i = 0; i < Nb; i++)
    {
        do
        {
            cout << "Enter time to produce detail by robot B[" << i + 1 << "]: ";
            cin >> A2;
        } while (A2 < 1 || A2 > 100);
        double mass[100];
        for (int l = 0; l < 100; ++l)
            A2 += mass[l];
        double sum2 = 1 / A2;
    }
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    cout << "Total: " << N / sum1 + N / sum2;                          // System time
     
}
Добавлено через 6 минут
И еще вопрос, а можно ли задать эту сумму не используя массивов?
0
UltraPenguin
230 / 96 / 27
Регистрация: 20.03.2014
Сообщений: 304
Завершенные тесты: 1
29.09.2015, 14:57 8
Цитата Сообщение от xGoooDx Посмотреть сообщение
Переменные объявил вначале и изменил ко-во элементов.
Прекрасно! Смотрите о чем я в том числе говорил. Вот ваш код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    for (i = 0; i < Na; i++)
    {
        do
        {
            cout << "Enter time to produce detail by robot A[" << i + 1 << "]: ";
            cin >> A1;
        } while (A1 < 1 || A1 > 100);
        double mass[100];
        for (int k = 0; k < 100; ++k)
            A1 += mass[k];
        double sum1 = 1 / A1;
            
            
    }
А вот мой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    double mass[100]; //его нужно проинициализировать!!!
    /*Пример инициализации массива:
    for (int k = 0; k < 100; ++k)
       mass[k] = 0;
    */
    double sum1;
    for (i = 0; i < Na; i++)
    {
        do
        {
            cout << "Enter time to produce detail by robot A[" << i + 1 << "]: ";
            cin >> A1;
        } while (A1 < 1 || A1 > 100);
        
        for (int k = 0; k < 100; ++k)
            A1 += mass[k];
        sum1 = 1 / A1;
    }
Видите разницу? И вообще тот же sum1 у вас в начале программы и внутри цикла объявляется. При повторном объявлении вы имеете дело уже с абсолютно другой переменной! Это может вылиться в эпичную магию) Исправьте.
Чтобы легче было контролировать области видимости переменных (что это такое можете почитать к примеру тут) лучше объявлять переменные максимально близко к моменту первого использования. C++ не паскаль, тут не обязательно все объявлять в самом начале.

Добавлено через 1 минуту
Цитата Сообщение от xGoooDx Посмотреть сообщение
И еще вопрос, а можно ли задать эту сумму не используя массивов?
Наверно можно если вы объясните, что значит А в вашей формуле.
0
xGoooDx
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 29
29.09.2015, 15:19  [ТС] 9
Спасибо огромное!
Теперь наконец понял суть!

А- это время производства одной детали роботом.
То есть, каждый робот производит деталь за свое время.
А чтобы найти минимальное ко-во деталей производства за минимальное время(1 с), то я делю секунду на алгебраическую сумму А. И в итоге получается кол-во деталей.
Задача очень интересная и довольно сложная, как в выводе формул, так и в написании кода.
Так как, знания языка-минимальны.

Добавлено через 2 минуты
Вот полное условие:
На некотором заводе решили модернизировать производство и закупили для этого роботов. Так как для обработки детали требовалось выполнение двух операций, роботы также были двух типов: первую операцию выполняли роботы типа А, а вторую – роботы типа В. Чтобы сэкономить на покупке роботов, было решено купить не новых роботов последней модели, а уже бывших в употреблении. В результате, время, которое разные роботы тратили на выполнение одной и той же операции, существенно различалось, что привело к трудностям в планировании работ.

Составьте программу, которая по заданному набору роботов обоих типов определяет, за какое минимальное время они смогут обработать определенное количество деталей.

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

В первой строке натуральное число N, 1 ≤ N ≤ 100000 – количество деталей, которое необходимо обработать.

Во второй строке натуральное число Na, 1 ≤ Na ≤ 1000 – количество роботов, выполняющих первую операцию.

В третьей строке через пробел Na натуральных чисел Ai, 1 ≤ Ai ≤ 100 – время, которое тратит i-ый робот типа А на выполнение операции.

В четвертой строке натуральное число Nb, 1 ≤ Nb ≤ 1000 – количество роботов, выполняющих вторую операцию.

В пятой строке через пробел Nb натуральных чисел Bi, 1 ≤ Bi ≤ 100 – время, которое тратит i-ый робот типа В на выполнение операции.

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

В первой строке одно целое число – минимальное время, за которое все N деталей будут обработаны сначала роботом типа A, а потом роботом типа В. Временем передачи детали от робота типа А роботу типа В пренебречь.
0
UltraPenguin
230 / 96 / 27
Регистрация: 20.03.2014
Сообщений: 304
Завершенные тесты: 1
29.09.2015, 15:23 10
Цитата Сообщение от xGoooDx Посмотреть сообщение
Теперь наконец понял суть!
Я искренне рад) А теперь докажите выложив код со свежими исправлениями, и мы попробуем все таки заставить его решать вашу задачку верно как математически так и с точки зрения кода.
0
xGoooDx
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 29
29.09.2015, 19:28  [ТС] 11
Вот исправленный код:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main()
{
    int N, Na, Nb, i, A1, A2,n1=1,k,n;
    double sum1 = 0, sum2 = 0,A1 = 0,A2 = 0;       // sum1 - is sum of all time spending on operation by ALL A-type robots ,sum2- ... of B-type
    cout << "Enter number of details: \n";
    do
    {
        cin >> N;
    } while (N < 1 || N > 100000);                             //  Number of details
 
                                                               ///////////////////////////////////////////////////////////////////////////////////////////////////
                                                               //     A-type
    cout << "Enter number of robots A: \n";
    do
    {
        cin >> Na;
    } while (Na < 1 || Na > 1000);                        //  Robots to perform first operation
                                                          //Spending time by A-type robot on performing an operation
    double mass[100];
    double sum1;
    for (i = 0; i < Na; i++)
    {
        do
        {
            cout << "Enter time to produce detail by robot A[" << i + 1 << "]: ";
            cin >> A1;
        } while (A1 < 1 || A1 > 100);
        for (int k = 0; k < 100; ++k)
            A1 += mass[k];
         sum1 = 1 / A1; 
    }
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    //B-type
 
    cout << "Enter number of robots B: \n";
    do
    {
        cin >> Nb;
    } while (Nb < 1 || Nb > 1000);                    //  Robots to perform second operation
                                                      //Spending time by B-type robot on performing an operation
    double mass[100];
    double sum2;
    for (i = 0; i < Nb; i++)
    {
        do
        {
            cout << "Enter time to produce detail by robot B[" << i + 1 << "]: ";
            cin >> A2;
        } while (A2 < 1 || A2 > 100);
        for (int l = 0; l < 100; ++l)
            A2 += mass[l];
        sum2 = 1 / A2;
    }
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    cout << "Total: " << N / sum1 + N / sum2;                          // System time
     
}
Нашел ошибку кстати в 43 строке, там вместо переменной Nb было Na.

Добавлено через 8 минут
Старый код случайно выложил
Вот этот справленный:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
using namespace std;
 
int main()
{
    int N, Na, Nb, i, A1, A2,n1=1,k,n;
    cout << "Enter number of details: \n";
    do
    {
        cin >> N;
    } while (N < 1 || N > 100000);                             //  Number of details
 
                                                               ///////////////////////////////////////////////////////////////////////////////////////////////////
                                                               //     A-type
    cout << "Enter number of robots A: \n";
    do
    {
        cin >> Na;
    } while (Na < 1 || Na > 1000);                        //  Robots to perform first operation
                                                          //Spending time by A-type robot on performing an operation
    double mass[100];
    double sum1;
    for (i = 0; i < Na; i++)
    {
        do
        {
            cout << "Enter time to produce detail by robot A[" << i + 1 << "]: ";
            cin >> A1;
        } while (A1 < 1 || A1 > 100);
        for (int k = 0; k < 100; ++k)
            A1 += mass[k];
         sum1 = 1 / A1; 
    }
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    //B-type
 
    cout << "Enter number of robots B: \n";
    do
    {
        cin >> Nb;
    } while (Nb < 1 || Nb > 1000);                    //  Robots to perform second operation
                                                      //Spending time by B-type robot on performing an operation
    double sum2;
    for (i = 0; i < Nb; i++)
    {
        do
        {
            cout << "Enter time to produce detail by robot B[" << i + 1 << "]: ";
            cin >> A2;
        } while (A2 < 1 || A2 > 100);
        for (int l = 0; l < 100; ++l)
            A2 += mass[l];
        sum2 = 1 / A2;
    }
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    cout << "Total: " << N / sum1 + N / sum2;                          // System time
     
}
0
UltraPenguin
230 / 96 / 27
Регистрация: 20.03.2014
Сообщений: 304
Завершенные тесты: 1
30.09.2015, 11:21 12
Вот так можно без массивов:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
    int N;
    do
    {
        cout << "Enter number of details [1..100000]: \n"; // Всегда говорите пользователям что и в каком виде вводить! Это правила хорошего тона.
        cin >> N;                   // Number of details
        if (N >= 1 && N <= 100000)
            break;
        else
            cout << "Wrong number!\n"; // Сообщайте об ошибках корректно.
    } while (1);
 
    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //     A-type
    int Na;
    do
    {
        cout << "Enter number of robots A [1..1000]: \n";
        cin >> Na;
        if (Na >= 1 && Na <= 1000)
            break;
        else
            cout << "Wrong number!\n"; // Сообщайте об ошибках корректно.
    } while (1);                       // Robots to perform first operation
    //Spending time by A-type robot on performing an operation
    double sum1, timeSum = 0;
    double currentTime;
    for (int i = 0; i < Na; ++i) // ++i выполняется быстрее i++
    {
        do
        {
            cout << "Enter time to produce detail by robot A[" << i + 1 << "]: ";
            cin >> currentTime;
        } while (currentTime < 1 || currentTime > 100);
 
        timeSum += currentTime;
    }
    sum1 = 1. / timeSum;
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    //B-type
    int Nb;
    do
    {
        cout << "Enter number of robots B [1..1000]: \n";
        cin >> Nb;
        if (Na >= 1 && Na <= 1000)
            break;
        else
            cout << "Wrong number!\n"; // Сообщайте об ошибках корректно.
    } while (1);                       // Robots to perform second operation
 
    //Spending time by B-type robot on performing an operation
    timeSum = 0;
    for (int i = 0; i < Nb; ++i)
    {
        do
        {
            cout << "Enter time to produce detail by robot B[" << i + 1 << "]: ";
            cin >> currentTime;
        } while (currentTime < 1 || currentTime > 100);
        timeSum += currentTime;
    }
    double sum2 = 1. / timeSum;
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    cout << "Total: " << ((double)N) / sum1 + ((double)N) / sum2; // System time
Более правильный с точки зрения оформления кода вариант, в котором повторяющиеся участки кода выделены в отдельные функции:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*!
 * \brief getNumberFromUser - получение числа от пользователя.
 * \param[in] message Сообщение, выводимое пользователю
 * \param[in] lowBound Нижняя граница вводимого значения
 * \param[in] highBound Верхняя граница вводимого значения
 * \return Введенное число
 */
int getNumberFromUser(const string& message,
                      const int& lowBound,
                      const int& highBound)
{
    int inputNum;
    do
    {
        cout << message.c_str() << "\n"; // Всегда говорите пользователям что и в каком виде вводить! Это правила хорошего тона.
        cin >> inputNum;                   // Number of details
        if (inputNum >= lowBound && inputNum <= highBound)
            break;
        else
            cout << "Wrong number!\n";    // Сообщайте об ошибках корректно.
    } while (1);
    return inputNum;
}
 
/*!
 * \brief getSpendingTime - получение времени обработки каждым роботом.
 * \param message Сообщение, выводимое пользователю
 * \param lowBound Нижняя граница вводимого значения
 * \param highBound Верхняя граница вводимого значения
 * \param robotsNum Число роботов
 * \return Общее время для пачки роботов
 */
double getSpendingTime(const string& message,
                       const double& lowBound,
                       const double& highBound,
                       const int& robotsNum)
{
    double timeSum = 0;
    double currentTime;
    for (int i = 0; i < robotsNum; ++i) // ++i выполняется быстрее i++
    {
        do
        {
            cout << message.c_str() << "[" << i + 1 << "]: ";
            cin >> currentTime;
            if (currentTime >= lowBound && currentTime <= highBound)
                break;
            else
                cout << "Wrong number!\n";    // Сообщайте об ошибках корректно.
        } while (1);
 
        timeSum += currentTime;
    }
    return timeSum;
}
 
int main()
{
    int N = getNumberFromUser(string("Enter number of details [1..100000]: "), 1, 100000);
 
    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //     A-type
    // Robots to perform first operation
    int Na = getNumberFromUser(string("Enter number of robots A [1..1000]: "), 1, 1000);
 
    //Spending time by A-type robot on performing an operation
    double sum1 = 1. / getSpendingTime(string("Enter time to produce detail by robot A"), 1, 100, Na);
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    //     B-type
    // Robots to perform second operation
    int Nb = getNumberFromUser(string("Enter number of robots B [1..1000]: "), 1, 1000);
 
    //Spending time by B-type robot on performing an operation
    double sum2 = 1. / getSpendingTime(string("Enter time to produce detail by robot B"), 1, 100, Nb);
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    cout << "Total: " << ((double)N) / sum1 + ((double)N) / sum2; // System time
}
1
xGoooDx
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 29
30.09.2015, 12:39  [ТС] 13
Спасибо большое за грамотный код, притом в двух вариантах.
Как я понял, во втором используются классы,не так ли?
Огромное спасибо еще за комментарии.
К сожалению, что-то не так с формулами, потому как функция вывода выдает ответ другой.
При вводе следующих данных:
кол-во деталей(N) - 6;
кол-во роботов А (Na)- 3;
Их время (currentTime) - 1,2,3;
кол-во роботов B (Nb)- 3;
Их время (currentTime) - 2,3;
Общее время должно быть - 9с
Выдает - 66 с
0
UltraPenguin
230 / 96 / 27
Регистрация: 20.03.2014
Сообщений: 304
Завершенные тесты: 1
30.09.2015, 16:45 14
Цитата Сообщение от xGoooDx Посмотреть сообщение
Как я понял, во втором используются классы,не так ли?
Нет. Что натолкнуло вас на эту мысль? Просто две функции дополнительные.

Цитата Сообщение от xGoooDx Посмотреть сообщение
К сожалению, что-то не так с формулами
Это да. И к сожалению я не силен в оптимизирующих вычислениях. Подозреваю в этой задаче не все так просто, и нужно смотреть что-то типа симплекс-метода (но могу и ошибаться). Может кто более сведущий может подсказать нужную математику? Самому стало интересно
0
xGoooDx
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 29
30.09.2015, 17:23  [ТС] 15
Как раз таки мат.формулы я вывел и на бумаге все получается
Могу скинуть алгоритм решения с нуля и как я пришел к той или иной формуле.
0
UltraPenguin
230 / 96 / 27
Регистрация: 20.03.2014
Сообщений: 304
Завершенные тесты: 1
30.09.2015, 17:24 16
Да давайте
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27188 / 18181 / 7199
Регистрация: 22.10.2011
Сообщений: 32,034
Записей в блоге: 6
30.09.2015, 19:03 17
xGoooDx, попробуйте прикреплять изображение к сообщению, а не давать ссылки на файлопомойки.
0
xGoooDx
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 29
30.09.2015, 19:07  [ТС] 18
Я не знаю,как прикреплять с телефона
0
UltraPenguin
230 / 96 / 27
Регистрация: 20.03.2014
Сообщений: 304
Завершенные тесты: 1
30.09.2015, 20:10 19
xGoooDx, отправьте мне на емэйл
Кликните здесь для просмотра всего текста
pmd_@mail.ru


Добавлено через 54 минуты
Вот код под ваши формулы, но формулы все равно неверны, т.к. используется очень грубое приближение. И да на http://www.e-olymp.com/ тесты не проходит кроме первого на 9ку
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
double getSpendingTime(const string& message,
                       const double& lowBound,
                       const double& highBound,
                       const int& robotsNum)
{
    double timeSum = 0;
    double currentTime;
    for (int i = 0; i < robotsNum; ++i) // ++i выполняется быстрее i++
    {
        do
        {
            cout << message.c_str() << "[" << i + 1 << "]: ";
            cin >> currentTime;
            if (currentTime >= lowBound && currentTime <= highBound)
                break;
            else
                cout << "Wrong number!\n";    // Сообщайте об ошибках корректно.
        } while (1);
 
        timeSum += 1. / currentTime;
    }
    return timeSum;
}
 
int main()
{
    int N = getNumberFromUser(string("Enter number of details [1..100000]: "), 1, 100000);
 
    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //     A-type
    // Robots to perform first operation
    int Na = getNumberFromUser(string("Enter number of robots A [1..1000]: "), 1, 1000);
 
    //Spending time by A-type robot on performing an operation
    double sum1 = (double) N / ceil(getSpendingTime(string("Enter time to produce detail by robot A"), 1, 100, Na));
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    //     B-type
    // Robots to perform second operation
    int Nb = getNumberFromUser(string("Enter number of robots B [1..1000]: "), 1, 1000);
 
    //Spending time by B-type robot on performing an operation
    double sum2 = (double) N / ceil(getSpendingTime(string("Enter time to produce detail by robot B"), 1, 100, Nb));
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    cout << sum1 + sum2; // System time
}
0
xGoooDx
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 29
30.09.2015, 21:46  [ТС] 20
Оххххх, эта задача, конечно...
Спасибо еще раз Вам за помощь!
Посижу на днях подумаю над формулами!
0
30.09.2015, 21:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2015, 21:46

Определить: больше ли сумма максимальной и минимальной цифры чем сумма остальных цифр числа
Дано целое число x (999 &lt; x &lt; 9 000 000). Определить: больше ли сумма максимальной и минимальной...

Составить программу, в которой вычислить z=(s1+s2)/(k1*k2), где s1 и k1 - сумма и количество положительных элементов массива Х[N]; s1 u k2 - сумма
Составить программу, в которой вычислить z=(s1+s2)/(k1*k2), где s1 и k1 - сумма и количество...

Вычислить F=(Sn+So)/(Sn-So), где Sn - сумма положительных элементов в нечетных строках матрицы Y(9x12), а So - сумма отр
Вычислить F=(Sn+So)/(Sn-So), где Sn - сумма положительных элементов в нечетных строках матрицы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru