2 / 2 / 0
Регистрация: 24.05.2010
Сообщений: 94
1

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

15.03.2012, 17:40. Показов 6106. Ответов 44
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется последовательность чисел a1, a2, ... ,aN, образована по правилу аi=random(N). Найти сумму первых из них (считая слева направо), произведение которых не превышает заданного числа М.
Очень прошу помочь!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2012, 17:40
Ответы с готовыми решениями:

Найти максимальную сумму чисел, произведение которых не превышает заданного числа.
Вводим массив(статический).Найти максимальную сумму чисел, произведение которых не превышает...

Найти сумму первых чисел последовательности произведение которых не превосходит заданного числа
Найти сумму первых чисел последовательности (заданной с использованием функции вычисления...

Найти произведение первых трех элементов массива, больших заданного числа
В массиве а1, а2, ..., а25 найти произведение первых трех элементов, больших чем 5.

Найти сумму элементов массива значения которых меньше заданного числа
Дан одномерный массив 6 элементов. Найти сумму элементов массива значения которых меньше 0.25...

44
Заблокирован
Автор FAQ
15.03.2012, 17:46 2
Zalik, язык Си или С++?
1
Кошковед
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
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;
}
1
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
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;
}

Не по теме:

опоздал

1
Заблокирован
Автор 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;
}
Миниатюры
Найти сумму первых элементов массива, произведение которых не превышает заданного числа М  
1
-=ЮрА=-
15.03.2012, 17:56
  #6

Не по теме:

co6ak, где сумма?

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

2
Кошковед
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
15.03.2012, 17:58 7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение

Не по теме:

co6ak, где сумма?

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


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

Не по теме:

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

1
2 / 2 / 0
Регистрация: 24.05.2010
Сообщений: 94
15.03.2012, 22:07  [ТС] 9
Нужно для с++. Всем огромное спасибо! Знаю, что это уже наглость и извиняюсь за это, но можно попроще?
0
Заблокирован
Автор 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:Более упростить я не могу, если конечно ты именно с моим кодом работаешь...
1
2 / 2 / 0
Регистрация: 24.05.2010
Сообщений: 94
15.03.2012, 22:45  [ТС] 11
А это статический массив?

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

Добавлено через 12 минут
С выводом разобрался. И тут еще возникла одна проблема, каждый раз в начале появляется 0 и все произведение обнуляется. В результате складывается весь массив.
0
Заблокирован
Автор FAQ
15.03.2012, 23:10 12
Цитата Сообщение от Zalik Посмотреть сообщение
Мне нужен статический массив.
- тогда сколько в нём элементов? Статический потому и статический что в нём заранее известно число элементов...
1
2 / 2 / 0
Регистрация: 24.05.2010
Сообщений: 94
15.03.2012, 23:29  [ТС] 13
Я делал уже так, но препод меня отшила, сказав что ей не нужен динамический массив. Я полностью запутался!
0
Заблокирован
Автор FAQ
15.03.2012, 23:43 14
Zalik, так в моём код массив динамический, не пойму что тебе в нём не нравится???
Вот это динамическое выделение памяти
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(!(a = new int[N]))
+ проверка а выделилась ли память(её всегда надо делать). Многи и не подозривают что часто крах их програм происходит из за того что память просто не выделилась, а никакой проверки нет
А это
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
delete [] a;
- чистка памяти
1
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.
0
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
16.03.2012, 10:21 16
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(!(a = new int[N]))
Если new выбросит исключение, никакой if не поможет. Зависит от компилятора.
0
-=ЮрА=-
16.03.2012, 10:26
  #17

Не по теме:

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

1
Заблокирован
Автор 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;
}
Миниатюры
Найти сумму первых элементов массива, произведение которых не превышает заданного числа М  
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:Если я жестковато ответил - это лишь с целью включения вашей логики...
1
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
16.03.2012, 10:54 20
-=ЮрА=-, говорю же, зависит от компилятора. Некоторые выбрасывают исключение по умолчанию, некоторые только при подключении <new>. При моем тесте (1000000000), кстати, прога успешно терминировала, а следовательно аргумент
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if -а достаточно чтобы алгоритм не обломился
не верен.
0
16.03.2012, 10:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2012, 10:54
Помогаю со студенческими работами здесь

В заданном массиве найти количество элементов, для которых отклонение от заданного числа А не превышает величины Р
В заданном массиве найти количество элементов, для которых отклонение от заданного числа А не...

Найти сумму элементов массива, удалить из него все элементы, модуль которых не превышает 1
Помогите, пожалуйста 1. Найти сумму элементов массива с нечетными номерами. 2. Найти сумму...

Вычислить произведение элементов массива S, значение которых не больше заданного негативного числа
Здесь задали на Борланде С(не С++) ну просто нечто (я нуб в этом деле) 1.Вычислить произведение...

Вычислить произведение элементов массива S, значение которых не больше заданного негативного числа
Здесь задали на Борланде С++ ну просто нечто (я нуб в этом деле) 1.Вычислить произведение...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru