С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 18.10.2016
Сообщений: 2

Купить на всю сумму приблизительно одинаковое количество акций каждого предприятия

05.12.2019, 13:00. Показов 1639. Ответов 2
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется такая задача: У Вас есть 1000 у.е. Вам необходимо купить акции 5 предприятий. Стоимость одной акции каждого предприятия может меняться от 5 до 20 у.е. (случайное число). Ваша задача купить на всю сумму приблизительно одинаковое количество акций каждого предприятия. Сколько всего куплено акций и сколько акций по каждому предприятию?

Не получается создать счётчик для каждой из компаний. В своём представлении вижу, что в цикле есть сравнение текущего индекса матрицы проходящее итерацию. И допустим, есть одномерный массив состоящий из 5 переменных равных нулю, и идёт какое-то сравнение со счётчиком
C++
1
 if (m[i] == m1) { m1++; }
C++
1
if (m[i] == m2) { m2++; }
... и т.д.

Вот код:

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
#include "stdlib.h"
#include "iostream"
#include <time.h>
 
using namespace std;
 
int main()
{
    int cash = 1000;
    int i = 0, j = 0;
    int m[6];
    int mlast, m1 = 0, m2 = 0, m3 = 0, m4 = 0, m5 = 0;
    setlocale(LC_ALL, "Russian");
    srand(time(NULL));
    int kolvo = 0;
        for (i = 1; i <= 5; i++)
        {
            while (cash >= 0)
            {
                m[i] = rand() % 16 + 5;
                kolvo++;
                cout << m[i] << " ";
                cash = cash - m[i];
                cout << cash << " \n";
            }
            mlast = m[i];
        }
        if (cash < 0)
        {
            cash = cash + mlast;
            cout << cash << " \n";
        }
        cout << kolvo << " \n";
    cout << endl;
}
Также делал подсчёт всех выполненных итераций. Возможно есть какие-то логические выражения, которыми можно высчитать это?

Ещё заметил, что цикл продолжается, даже когда кэш уходит в минус :с
Ставил условие, что цикл продолжается, пока кэш не ниже нуля, но теперь нужно уточнить, что если оставшаяся у нас сумма меньше, чем стоимость акции, то покупать её не стоит.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.12.2019, 13:00
Ответы с готовыми решениями:

Определить сколько компьютеров каждого из наименований можно купить на сумму n.
В магазине продаются компьютеры 3-x наименований, цена их равна a, b, c тенге соответственно. Определить сколько компьютеров каждого из...

Определить сколько компьютеров каждого из наименований можно купить на сумму n.
В магазине продаются компьютеры 3-x наименований, цена их равна a, b, c тенге соответственно. Определить сколько компьютеров каждого из...

Определить суммарную стоимость акций в тот месяц, когда цена акций упадет вдвое
В начале года на рынке ценных бумаг имелось N акций фирмы A по цене S рублей.В каждые последующие месяцы количество этих акций увеличилось...

2
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
05.12.2019, 14:19
Лучший ответ Сообщение было отмечено LionHeartAlive как решение

Решение

LionHeartAlive, я бы делал так:
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
#include <stdlib.h>
#include <iostream>
#include <time.h>
 
using namespace std;
 
int main()
{
    const int   n = 5;
    int         cash = 1000;
    int         i, j;
    int         m[n];
    int         c[n] = { 0 };
 
    setlocale(LC_ALL, "Russian");
    srand(time(NULL));
 
    for (i = 0; i < n; i++)
        m[i] = rand() % 16 + 5;
 
    for (i = 0; i < n - 1; i++)
        for (j = i+1; j < n; j++)
            if (m[i] < m[j])
                swap(m[i], m[j]);
 
    while(true)
    {
        i = 0;
        for (j = 0; j < n; j++)
        {
            if (cash >= m[j])
            {
                c[j]++;
                cash -= m[j];
                i++;
            }
        }
        if (i == 0)
            break;
    }
    for (j = 0; j < n; j++)
        i += c[j];
    
    cout << "Остаток: " << cash << " у.е." << endl;
    cout << "Всего: " << i << " акций" << endl;
    cout << "Куплено по предприятиям:" << endl;
    for (j = 0; j < n; j++)
        cout << j + 1 << ": " << c[j] << " акций по " << m[j] << " у.е." << endl;
 
    system("pause");
}
1
0 / 0 / 0
Регистрация: 18.10.2016
Сообщений: 2
05.12.2019, 18:54  [ТС]
Исход вашего кода группирует предприятия именно по количеству купленных акций и по одинаковой сумме.

Смог кое-как нашаманить себе ответ, но хотелось бы теперь оптимизировать код, чтобы не было так много циклов и условий, это возможно?

Также добавил функцию деления без остатка, может быть есть какой-то синтаксический символ сокращающий эти мувы? Извините, если задаю какие-то глупые вопросы :\

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
78
79
#include "stdlib.h"
#include "iostream"
#include <time.h>
 
using namespace std;
 
int division(int val, int divider)
{
    return val / divider;
};
 
int main()
{
    int cash = 1000;
    int i = 0;
    int m[6];
    int m1 = 0, m2 = 0, m3 = 0, m4 = 0, m5 = 0;
    setlocale(LC_ALL, "Russian");
    srand(time(NULL));
    int kolvo = 0;
        for (i = 1; i <= 5; i++)
        {
            while (cash >= 0)
            {
                m[i] = rand() % 16 + 5;
                kolvo++;
                cout << m[i] << " ";
                if (cash >= m[i])
                {
                    cash = cash - m[i];
                    cout << cash << " \n";
                }
                else {
                    break;
                }
            }
            break;
        }
        cout << " \n" << "Остаток: " << cash << " у.е.";
        kolvo = kolvo - 1;
        cout << " \n";
        cout << "Количество купленных акций: " << kolvo << " \n";
        int cpny = division(kolvo, 5);
        m1 = cpny;
        m2 = cpny;
        m3 = cpny;
        m4 = cpny;
        m5 = cpny;
        int ostatok = kolvo % 5;
 
        if (ostatok == 1)
        {
            m1++;
        }
        if (ostatok == 2)
        {
            m1++;
            m2++;
        }
        if (ostatok == 3)
        {
            m1++;
            m2++;
            m3++;
        }
        if (ostatok == 4)
        {
            m1++;
            m2++;
            m3++;
            m4++;
        }
        cout << "Количество купленных акций у первого предприятия = " << m1 << " \n";
        cout << "Количество купленных акций у второго предприятия = " << m2 << " \n";
        cout << "Количество купленных акций у третьего предприятия = " << m3 << " \n";
        cout << "Количество купленных акций у четвертого предприятия = " << m4 << " \n";
        cout << "Количество купленных акций у пятого предприятия = " << m5 << " \n";
    cout << endl;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.12.2019, 18:54
Помогаю со студенческими работами здесь

Известны оценки по физике каждого ученика двух классов.Определить средниюю оценку в каждом классе.Количество учащихся в каждом классе одинаковое!
Известны оценки по физике каждого ученика двух классов.Определить средниюю оценку в каждом классе.Количество учащихся в каждом классе...

Цикл repeat. Стоимость акций известной фирмы стабильно растёт на протяжении 6 месяцев. Найти стоимость акций
Пожалуйста решите с циклом repeat. Стоимость акций известной фирмы стабильно растёт на протяжении 6 месяцев, каждый месяц на 0,6%....

Какое наибольшее количество бутылок воды можно купить, имея некоторую сумму денег
1. Бутылка воды стоит 45 копеек. Пустые бутылки сдаются по 20 копеек, и на полученные деньги опять покупается вода. Какое наибольшее...

Какое наибольшее количество бутылок воды можно купить, имея некоторую сумму денег S копеек?
бутылка воды стоит 45 копеек. Пустые бутылки сдаются по 20 копеек, и на полученные деньги опять покупается вода. Какое наибольшее...

Массив: Вывести количество блюд, которое может купить человек, имеющий заданную сумму на каждый день.
Добрый день форумчане. Начал изучение Java. Есть такая тема для программы. С клавиатуры вводим количество блюд, например 5. ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru