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

В каждом столбце обнулите минимальное количество элементов так, чтобы сумма элементов столбца не превышала заданную - C++

Восстановить пароль Регистрация
 
include
2 / 2 / 0
Регистрация: 02.02.2010
Сообщений: 5
26.04.2010, 13:51     В каждом столбце обнулите минимальное количество элементов так, чтобы сумма элементов столбца не превышала заданную #1
Помогите решить при помощи функций.плиссзО_о

Пусть дана матрица А(n x m), состоящая из натуральных чисел. В каждом столбце обнулите минимальное количество элементов так, чтобы сумма элементов столбца не превышала заданную.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2010, 13:51     В каждом столбце обнулите минимальное количество элементов так, чтобы сумма элементов столбца не превышала заданную
Посмотрите здесь:

Вычислить количество отрицательных элементов в каждом столбце матрицы и сформировать из них новый массив C++
Найти количество отрицательных элементов столбца, у которого сумма четных элементов не больше 30. C++
C++ В каждом столбце матрицы найти количество положительных элементов
C++ Найти количество отрицательных элементов в каждом столбце матрицы
В матрице К размером m*n найти в каждом столбце произведение отрицательных элементов и количество нулевых элементов в матрице C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
26.04.2010, 15:52     В каждом столбце обнулите минимальное количество элементов так, чтобы сумма элементов столбца не превышала заданную #2
Не знаю как с трехмерной матрицей (я ее никогда не делал даже), а с одномерным массивом вот что получилось:

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
#include <iostream>
#include <vector>
#include <conio.h>
#include <iomanip>
 
int main()
{
    const int SIZE_MAS=5;
    std::vector<int> mas(SIZE_MAS);
    srand(time(NULL));
 
    mas[0]=8;
    mas[1]=1;
    mas[2]=2;
    mas[3]=4;
    mas[4]=3;
 
    std::cout<<std::endl<<"DO: "<<std::endl;
    int sum=0; //сумма элементов массива
    for (int i=0; i<mas.size(); i++){
       // mas[i]=1+rand()%10;
        sum+=mas[i];
        std::cout<<std::setw(3)<<mas[i];
    }
 
    int max_sum=0;
    std::cout<<std::endl<<"vvedite maximalnyu summu= ";
    std::cin>>max_sum;
 
//cам алгоритм
    sum-=max_sum;
    while(sum>0){
        int ii=0;
        int i=0;
        int max_element=0;
        while (i<mas.size()){ //поиск максимума
            if(mas[i]>=max_element && mas[i]<=sum){
                max_element=mas[i];
                ii=i;
            }
            ++i;
        }
        sum-=max_element;
        mas[ii]=0;
    }
//конец
 
    std::cout<<std::endl<<"POSLE: "<<std::endl;
    for (int i=0; i<mas.size(); i++)
    std::cout<<std::setw(3)<<mas[i];
 
    return 0;
}
но вследствии испытаний, я думаю что не к каждому масииву можно применить этот алгоритм, например к этому: 7 3 7 6 1, и если требуется сумма 5, то никак не получается.

Добавлено через 4 минуты
вообщем если в качестве контрольной суммы ввести число, которое можно составить из элементов массива, то все работает.
include
2 / 2 / 0
Регистрация: 02.02.2010
Сообщений: 5
28.04.2010, 11:04  [ТС]     В каждом столбце обнулите минимальное количество элементов так, чтобы сумма элементов столбца не превышала заданную #3
Цитата Сообщение от PointsEqual Посмотреть сообщение
Не знаю как с трехмерной матрицей
Вообще та єто двухмерная.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
28.04.2010, 11:18     В каждом столбце обнулите минимальное количество элементов так, чтобы сумма элементов столбца не превышала заданную #4
Цитата Сообщение от include Посмотреть сообщение
А(n x m)
а чего тогда там 3 перемнных?
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
28.04.2010, 12:30     В каждом столбце обнулите минимальное количество элементов так, чтобы сумма элементов столбца не превышала заданную #5
Это крестик, а не икс
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
28.04.2010, 12:36     В каждом столбце обнулите минимальное количество элементов так, чтобы сумма элементов столбца не превышала заданную #6
мда....

Добавлено через 3 минуты
Цитата Сообщение от PointsEqual Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//cам алгоритм
 sum-=max_sum;
 while(sum>0){
 int ii=0;
 int i=0;
 int max_element=0;
 while (i<mas.size()){ //поиск максимума
 if(mas[i]>=max_element && mas[i]<=sum){
 max_element=mas[i];
 ii=i;
 }
 ++i;
 }
 sum-=max_element;
 mas[ii]=0;
 }
//конец
алгоритм все равно подходит, если чуть чуть изменить
Yandex
Объявления
28.04.2010, 12:36     В каждом столбце обнулите минимальное количество элементов так, чтобы сумма элементов столбца не превышала заданную
Ответ Создать тему
Опции темы

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