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

Найти сумму первых элементов массива, произведение которых не превышает заданного числа М - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.73
Zalik
2 / 2 / 0
Регистрация: 24.05.2010
Сообщений: 94
15.03.2012, 17:40     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #1
Имеется последовательность чисел a1, a2, ... ,aN, образована по правилу аi=random(N). Найти сумму первых из них (считая слева направо), произведение которых не превышает заданного числа М.
Очень прошу помочь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2012, 17:40     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М
Посмотрите здесь:

C++ Найти максимальную сумму чисел, произведение которых не превышает заданного числа.
C++ Найти сумму тех элементов массива, цифровая запись которых дает четную сумму цифр, а также найти максимальный элемент массива
Вычислить и вывести произведение первых 7 элементов массива и сумму следующих 7 элементов находящихся на четных позициях C++
C++ В матрице А (mxn) найти найти сумму элементов по колонкам, значения которых по модулю меньше заданного числа К
В заданном массиве из n элементов найти сумму первых n/2, а затем произведение оставшихся элементов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
15.03.2012, 17:46     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #2
Zalik, язык Си или С++?
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
15.03.2012, 17:47     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #3
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
#include <iostream>
#include <time.h>
#include <stdlib.h>
 
 
int main()
{
    srand( time ( NULL ) );
 
    std::cout << "Enter N: ";
    int N;
    std::cin  >> N;
 
    std::cout << "\nEnter M: ";
    int M;
    std::cin  >> M;
 
    int total = 0;
    int multy = 1;
    for ( int i = 0; i < N; i++)
    {
        int x = rand() % N;
        multy *= x;
        if ( multy < M )
            total += x;
        else
            break;
    }
 
 
    std::cout << "\nTotal = " << total << "\nMultyply = " << multy;
    return 0;
}
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
15.03.2012, 17:48     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #4
Цитата Сообщение от Zalik Посмотреть сообщение
Имеется последовательность чисел a1, a2, ... ,aN, образована по правилу аi=random(N). Найти сумму первых из них (считая слева направо), произведение которых не превышает заданного числа М.
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
#include <cstdlib>
#include <iostream>
#include <ctime>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    const int N = 10;
    int M, sum = 1;
    int i;
    int a[N];
    srand(time(NULL));
    cout << "M = " << endl;
    cin >> M;
    for (i = 0; i < N; i++)
        a[i] = rand() % 100;
    for (i = 0; i < N && sum * a[i] <= M; i++)
        sum *= a[i];
    for (i = 0; i < N; i++)
        cout << a[i] << " ";
    cout << endl;
    cout << "Sum = " << sum;
    system("PAUSE > NULL");
    return EXIT_SUCCESS;
}

Не по теме:

опоздал

-=ЮрА=-
Заблокирован
Автор FAQ
15.03.2012, 17:51     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #5
Вот на плюсах
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    long N,M,m,i,S;
    int *a = NULL;
    time_t t;
    while(true)
    {
        srand(time(&t));
        
        cout<<"Enter N : ";cin>>N;
        cout<<"Enter M : ";cin>>M;
        if(!(a = new int[N]))
            cout<<"Allocation memory error\n";
        else
        {
            m = 1 + (i = (S = 0));
            while(m < M)
            {
                m *= (a[i] = rand()%N);
                S += a[i];
                cout<<a[i]<<" ";
            }
            cout<<"\nSumm : "<<S<<endl;
            delete [] a;
        }
    }
    return 0;
}
Миниатюры
Найти сумму первых элементов массива, произведение которых не превышает заданного числа М  
-=ЮрА=-
15.03.2012, 17:56
  #6

Не по теме:

co6ak, где сумма?

Цитата Сообщение от Zalik Посмотреть сообщение
Найти сумму первых из них (считая слева направо), произведение которых не превышает заданного числа М
dimcoder, почему 10 а не 5-ть или 1024???
Цитата Сообщение от dimcoder Посмотреть сообщение
const int N = 10;
также обрати внимание на диапазон генерации
Цитата Сообщение от dimcoder Посмотреть сообщение
rand() % 100;
Цитата Сообщение от Zalik Посмотреть сообщение
аi=random(N)

co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
15.03.2012, 17:58     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение

Не по теме:

co6ak, где сумма?

dimcoder, почему 10 а не 5-ть или 1024???


total - сумма
еще глупые вопросы жги
там, если глазками посмотреть, видно, что ЕСЛИ ПРОИЗВЕДЕНИЕ НЕ БОЛЬШЕ, то считается сумма.
-=ЮрА=-
15.03.2012, 18:01
  #8

Не по теме:

Цитата Сообщение от co6ak Посмотреть сообщение
еще глупые вопросы жги
- зачем std::cout???Зачем тут рефакторинг приведи примеры из практики где ты хотя бы раз сталкивался с конфликтом namespace???Признаю не увидел total, ещё бы вывод элементов добавить и будет вообще здоровоЖгу

Zalik
2 / 2 / 0
Регистрация: 24.05.2010
Сообщений: 94
15.03.2012, 22:07  [ТС]     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #9
Нужно для с++. Всем огромное спасибо! Знаю, что это уже наглость и извиняюсь за это, но можно попроще?
-=ЮрА=-
Заблокирован
Автор FAQ
15.03.2012, 22:15     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #10
Цитата Сообщение от Zalik Посмотреть сообщение
Нужно для с++.
- пост 5 именно на С++

Цитата Сообщение от Zalik Посмотреть сообщение
но можно попроще
- можно просто вывести на экран ответ посчитанный на калькуляторе, друг ну у тебя
1-е генерация случайных чисел
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
srand(time(&t));
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
(a[i] = rand()%N);
- вот она
2 -е сумма и произведение

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
m *= (a[i] = rand()%N);
* * * * * * * * * * * * * * * * S += a[i];
- вот они, куда ещё проще???
Предположу что такая запись повергла в уныние и является непонятной

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
(i = (S = 0));
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
(a[i] = rand()%N);
- хорошо
m = 1 + (i = (S = 0)); эквивалентно 3-м строкам кода
m = 1;
i = 0;
S = 0;

а это
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
m *= (a[i] = rand()%N);
- эквивалентно 2-м
a[i] = rand()%N;
m = m*a[i];
Если хочешь ещё проще убери внешний цикл
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(true)
* * * * {
PS:Более упростить я не могу, если конечно ты именно с моим кодом работаешь...
Zalik
2 / 2 / 0
Регистрация: 24.05.2010
Сообщений: 94
15.03.2012, 22:45  [ТС]     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #11
А это статический массив?

Добавлено через 5 минут
Мне нужен статический массив. И как еще вывести этот массив?

Добавлено через 12 минут
С выводом разобрался. И тут еще возникла одна проблема, каждый раз в начале появляется 0 и все произведение обнуляется. В результате складывается весь массив.
-=ЮрА=-
Заблокирован
Автор FAQ
15.03.2012, 23:10     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #12
Цитата Сообщение от Zalik Посмотреть сообщение
Мне нужен статический массив.
- тогда сколько в нём элементов? Статический потому и статический что в нём заранее известно число элементов...
Zalik
2 / 2 / 0
Регистрация: 24.05.2010
Сообщений: 94
15.03.2012, 23:29  [ТС]     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #13
Я делал уже так, но препод меня отшила, сказав что ей не нужен динамический массив. Я полностью запутался!
-=ЮрА=-
Заблокирован
Автор FAQ
15.03.2012, 23:43     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #14
Zalik, так в моём код массив динамический, не пойму что тебе в нём не нравится???
Вот это динамическое выделение памяти
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(!(a = new int[N]))
+ проверка а выделилась ли память(её всегда надо делать). Многи и не подозривают что часто крах их програм происходит из за того что память просто не выделилась, а никакой проверки нет
А это
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
delete [] a;
- чистка памяти
Zalik
2 / 2 / 0
Регистрация: 24.05.2010
Сообщений: 94
16.03.2012, 07:00  [ТС]     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #15
Юра я уже достал вас, наверно, но вы можете посмотреть этот вариант? Меня выбрасывает...


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
// l2.cpp : Defines the entry point for the console application.
//
 
 
#include "stdafx.h"
#include <iostream>
#include<CONIO.H>
#include<STDIO.H>
#include <time.h>
#include <stdlib.h>
using namespace std;
 
int main()
{
    int n;
   srand(time(NULL));
   float *massiv;
   massiv = new float [n];
for (int i=0; i<n; i++)
{
*(massiv+i) = float (rand()%10);
cout << *(massiv+i) << " " ;}
    int a;
    cout << endl << "Vvedite chislo" << endl;
    cin >> a;
    int umnog = 1, summa = 0;
    if(massiv[0] < a){
        for(int i = 0; i < 10; i++){
            if(umnog < a){
                umnog *= massiv[i];
                summa += massiv[i];
            }
            else{
                summa = summa - massiv[i - 1];
                break;
            }
        }
    }
    else{
        cout << "Oshibka :-(((";
    }
    cout <<"Сумма чисел произведение которых не превышает заданное число="<< summa;
 
    getch();
}
Добавлено через 6 часов 37 минут
Выводит ошибку Run-Time Check Failure #3 - The variable 'n' is being used without being defined.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
16.03.2012, 10:21     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #16
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(!(a = new int[N]))
Если new выбросит исключение, никакой if не поможет. Зависит от компилятора.
-=ЮрА=-
16.03.2012, 10:26
  #17

Не по теме:

Цитата Сообщение от dimcoder Посмотреть сообщение
Если new выбросит исключение, никакой if не поможет. Зависит от компилятора.
- если выбросит исключение bad alloc приравняй arr = NULL и иди дальше(по крайней мере на студии такое жуётся) хотя сейчас попробуем. Будем выделять память для int * arr размером скажем 10 и 10 ноликов элементов(столько памяти не выделяется).

-=ЮрА=-
Заблокирован
Автор FAQ
16.03.2012, 10:37     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #18
dimcoder, компилируй и убеждайся в моих словах if -а достаточно чтобы алгоритм не обломился
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 <iostream>
using namespace std;
 
int main()
{
    int * arr       = 0;
    unsigned long n = 0;
    while(true)
    {
        cin.clear();
        cin.sync();
        cout<<"Enter num of elements in array\n";
        if(!(cin>>n))
            cout<<"Input error\n";
        else
        if(!(arr = new int[n]))
            cout<<"Alllocation memory error\n";
        else
        {
            cout<<"Allocation successfull\n"
                <<"number of elements : "<<n<<endl
                <<"adress of array 0x"<<arr<<endl;
            delete [] arr;
        }
        arr = NULL;
    }
    return 0;
}
Миниатюры
Найти сумму первых элементов массива, произведение которых не превышает заданного числа М  
-=ЮрА=-
Заблокирован
Автор FAQ
16.03.2012, 10:45     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #19
Цитата Сообщение от Zalik Посмотреть сообщение
Юра я уже достал вас, наверно, но вы можете посмотреть этот вариант? Меня выбрасывает...
- у меня вопрос неужели такая запись
Цитата Сообщение от Zalik Посмотреть сообщение
*(massiv+i)
вам понятней нежели massiv[i] ???Вас выбрасывает потому как неинициализируете число элементов

Цитата Сообщение от Zalik Посмотреть сообщение
int n;
* *srand(time(NULL));
* *float *massiv;
* *massiv = new float [n];
- вы сколько n ввели, а???Вот то то и оно что числа элементов не ввели а память выделить пытаетесь. Так пишите полное условие задачи я вам сделаю в духе последнего кода, с отсутствием фильтров корректного ввода и выделения памяти. Хотя посмотрите мой код здесь

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(!(cin>>n))
* * * * * * * * * * * * cout<<"Input error\n";
* * * * * * * * else
* * * * * * * * if(!(arr = new int[n]))
и на скрин, как выдумаете чтобы происходило с программой если бы ошибки Input error или Alllocation memory error не фильтровались, м???Отвечу вылетело бы.
В общем решением для вашего кода является
Цитата Сообщение от Zalik Посмотреть сообщение
int n;
* *srand(time(NULL));
* *float *massiv;
cout<<"Vvedite chislo elementov : ";
cin>>n;

* *massiv = new float [n];
а вам решать писать с фильтрами возможных ошибок либо писать попроще на уровне начинающего с потенциальной опасностью вылета алгоритма...
PS:Если я жестковато ответил - это лишь с целью включения вашей логики...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2012, 10:54     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М
Еще ссылки по теме:

C++ Найти количество элементов массива, значения которых положительны, и не больше заданного числа
Найти сумму элементов массива, порядковые номера которых - простые числа C++
C++ Найти произведение элементов массива, результат умножения цифр которых больше заданного К

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

Или воспользуйтесь поиском по форуму:
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
16.03.2012, 10:54     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М #20
-=ЮрА=-, говорю же, зависит от компилятора. Некоторые выбрасывают исключение по умолчанию, некоторые только при подключении <new>. При моем тесте (1000000000), кстати, прога успешно терминировала, а следовательно аргумент
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if -а достаточно чтобы алгоритм не обломился
не верен.
Yandex
Объявления
16.03.2012, 10:54     Найти сумму первых элементов массива, произведение которых не превышает заданного числа М
Закрытая тема Создать тему
Опции темы

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