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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Stans
 Аватар для Stans
78 / 54 / 3
Регистрация: 05.12.2009
Сообщений: 435
25.10.2011, 18:56     Найти максимальную сумму чисел, произведение которых не превышает заданного числа. #1
Вводим массив(статический).Найти максимальную сумму чисел, произведение которых не превышает заданного числа.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2011, 18:56     Найти максимальную сумму чисел, произведение которых не превышает заданного числа.
Посмотрите здесь:

Среди простых чисел , не превосходящих заданного натурального числа N .Найти такие, в десятичном представление которых больше всего нулей C++
C++ Массивы. Найти произведение только тех чисел, которые больше заданного числа М.
Найти сумму первых элементов массива, произведение которых не превышает заданного числа М C++
Дана последовательность целых положительных чисел. Найти произведение только тех чисел, которые больше заданного числа М C++
C++ Сжать массив, удалив из него все элементы. модуль которых не превышает, заданного числа.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ViT(Vet@l)
27 / 26 / 2
Регистрация: 13.12.2010
Сообщений: 333
25.10.2011, 20:00     Найти максимальную сумму чисел, произведение которых не превышает заданного числа. #2
Если я все правильно понял, то вводим массив (в этой программе из 10 элементов). Если ппервый элемент больше введенного (заданного числа), то выбивает ошибку. Если первое меньше введенного, то идет правее по массиву, пока произведение не привысит заданное число.
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
#include <iostream>
 
using namespace std;
 
int main()
{
 
    int massiv[10];
 
    int a;
 
    cout << "Vvedite massiv" << endl;
 
    for(int i = 0; i < 10; i++)
        cin >> massiv[i];
 
    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;
 
    return 0;
}
Stans
 Аватар для Stans
78 / 54 / 3
Регистрация: 05.12.2009
Сообщений: 435
25.10.2011, 21:25  [ТС]     Найти максимальную сумму чисел, произведение которых не превышает заданного числа. #3
Нет, условие немного посложнее.
Вводим массив. Перебираем все возможные комбинации перемножения элементов массива. Из всех этих комбинаций выделяем те, произведение которых не превышает заданное число. Потом из этих комбинаций находим ту, сумма элементов которой, наибольшая. Вот так.
У меня проблема с тем, как перебрать все эти комбинации. Комбинация может состоять, например, из 2-го, 5-го и 8-го элементов.
ViT(Vet@l)
27 / 26 / 2
Регистрация: 13.12.2010
Сообщений: 333
25.10.2011, 22:07     Найти максимальную сумму чисел, произведение которых не превышает заданного числа. #4
Ну я сделал как мог
Интересно будет посмотреть на решение задачи
Если кто может - решите - вас просят уже двое
Rampagery
0 / 0 / 0
Регистрация: 25.10.2011
Сообщений: 6
26.10.2011, 00:44     Найти максимальную сумму чисел, произведение которых не превышает заданного числа. #5
x-ограничитель 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
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
// acdfg.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<cmath>
using namespace std;
int j;const int N=100;
bool condition(int a,int b,double x)
{
    return(a*b<=x)?true:false;
}
int dob(int *m,int n,double x,int MAX)
{
static int dob,l;static int count,summa;
for(int i=0;i<n;i++)
{
    dob=m[i];
    l=i;
    while(l<n-1)
    {
     dob=m[i];summa=m[i];count=1;
      for(j=l+1;j<n;j++)
      {
        if(condition(dob,m[j],x)==true)
           {
               dob*=m[j];summa+=m[j];count++;
           }
      }
      if(summa>=MAX&&count>=2){MAX=summa;}
      l++;
    }
}
return MAX;
}
int _tmain(int argc, _TCHAR* argv[])
{
    int m[N],n,dobb=1,summa=0,maxim;double x;
    cout<<"Enter n\n";
    cin>>n;
    cout<<"Enter x\n";
    cin>>x;
    cout<<"Enter elements\n";
    for(int i=0;i<n;i++)
        cin>>m[i];
    dobb=m[0];summa=m[0];
    for(int i=1;i<n;i++)
        if(condition(dobb,m[i],x)==true){dobb*=m[i];summa+=m[i];}
    maxim=summa;
    cout<<dob(m,n,x,maxim)<<endl;
    getch();
    return 0;
}
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
26.10.2011, 05:21     Найти максимальную сумму чисел, произведение которых не превышает заданного числа. #6
у меня так получилось
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
#include "stdafx.h"
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
 
int main(){
    const int size = 10;
    int arr[size] = {10, 5, 2, 12, 30, 11, 4, 8, 1, 6};
    int num, sum = 0, num1, num2;
 
    cout << "Enter number: " << endl;
    cin >> num;
    for(int i = 0; i<size-1; ++i){
        for(int j = i+1; j < size; j++ ){
            if((arr[i]*arr[j]) < num && (arr[i]+arr[j]) > sum){
                num1 = arr[i];
                num2 = arr[j]; 
                sum = num1+num2;
            }
        }
    }
    cout << "Number 1 : "<< num1 << endl;
    cout << "Number 2 : "<< num2 << endl;
    cout << "Sum : " << sum << endl;
    system("pause");
 
    return 0;
}
Rampagery
0 / 0 / 0
Регистрация: 25.10.2011
Сообщений: 6
26.10.2011, 13:48     Найти максимальную сумму чисел, произведение которых не превышает заданного числа. #7
greeezz, а кто вам сказал што числа положительные???если сума будет меньша 0 то ваша программа накроетса...да и перечислены не все варианты.
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
26.10.2011, 16:46     Найти максимальную сумму чисел, произведение которых не превышает заданного числа. #8
Rampagery, для работы с отрицательными числами предполагаю что вполне достаточно внести простое изменение.

замените строчку
C++
1
if((arr[i]*arr[j]) < num && (arr[i]+arr[j]) > sum){ .... }
на
C++
1
if(((arr[i]*arr[j]) < num && (arr[i]+arr[j]) > sum) || ((arr[i]*arr[j]) < num && sum == 0)){ .... }
буду благодарен за ваши комментарии.
Rampagery
0 / 0 / 0
Регистрация: 25.10.2011
Сообщений: 6
26.10.2011, 20:35     Найти максимальную сумму чисел, произведение которых не превышает заданного числа. #9
даже не смотря на ето...у вас не все варианты перчислены далеко.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2011, 21:31     Найти максимальную сумму чисел, произведение которых не превышает заданного числа.
Еще ссылки по теме:

C++ В матрице А (mxn) найти найти сумму элементов по колонкам, значения которых по модулю меньше заданного числа К
C++ Найти сумму чисел Фибоначчи, меньших заданного числа Q
C++ Найти сумму чисел массива меньших заданного числа

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

Или воспользуйтесь поиском по форуму:
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
26.10.2011, 21:31     Найти максимальную сумму чисел, произведение которых не превышает заданного числа. #10
Цитата Сообщение от Rampagery Посмотреть сообщение
даже не смотря на ето...у вас не все варианты перчислены далеко.
простите не понял. о каких вариантах вы говорите?
Yandex
Объявления
26.10.2011, 21:31     Найти максимальную сумму чисел, произведение которых не превышает заданного числа.
Ответ Создать тему
Опции темы

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