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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
tron737
8 / 8 / 4
Регистрация: 29.12.2013
Сообщений: 27
#1

Из каждого элемента массива, начиная со второго, вычесть все остальные элементы - C++

12.07.2014, 20:40. Просмотров 885. Ответов 20
Метки нет (Все метки)

Дан массив, из каждого элемента, начиная со второго, нужно вычесть все остальные элементы.
вот пример:
1 2 3 4 5
(2 - 3 - 4 - 5 - 1), (3 - 4 - 5 - 1 -2), (4 - 5 - 1- 2 - 3), (5 -1 -2 -3 -4)
в результате получим:
-11 -9 -7 -5

думаю, моя задумка понятна.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2014, 20:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Из каждого элемента массива, начиная со второго, вычесть все остальные элементы (C++):

Увеличить все элементы этого массива начиная с первого положительного элемента в два раза. - C++
Помогите решить в Borland c++ Если можно еще блок-схему Задан массив целых чисел. Увеличить все элементы этого массива начиная с...

все элементы побочной диагонали квадратного массива,начиная с элемента,расположенного в правом верхнем углу. - C++
Вывести на экран (в одну строку): а)все элементы побочной диагонали квадратного массива,начиная с элемента,расположенного в правом...

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

В массиве вычислить среднее арифметическое и вычесть его из каждого элемента массива. - C++
Файлы. Работа с одномерными массивами Постановка задачи 1 Прочитать из файла два одномерных массива разной длины. Для каждого из них...

Вставить два элемента по 1000, начиная с четвертого элемента исходного массива, сдвигая его элементы - C++
Помогите с созданием программы, которая выполняет следующие действия: a) одномерный массив из 10 элементов целого типа в диапазоне ; b)...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
olper
24 / 24 / 11
Регистрация: 02.12.2013
Сообщений: 75
12.07.2014, 21:16 #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
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
    int inarray[] = {1,2,3,4,5};
    std::vector<int> invec (inarray, inarray + sizeof(inarray) / sizeof(int) );
    std::vector<int> result;
 
    std::vector<int>::iterator it,it2;
    for (it = invec.begin()+1;it!=invec.end();++it)
    {
        it2 = invec.begin();
        int s=0;
        for (it2=invec.begin();it2!=invec.end();++it2)
        {
            if (it2==it) continue;          
            s+=*it2;
        }
        result.push_back(*it-s);        
    }   
    std::copy(result.begin(), result.end(), std::ostream_iterator<int>(std::cout, "\t"));
    std::cout<<std::endl<<"any key:>";
    std::cin.ignore();
    return 0;
}
gru74ik
Модератор
Эксперт CЭксперт С++
4159 / 1785 / 197
Регистрация: 20.02.2013
Сообщений: 4,917
Записей в блоге: 21
12.07.2014, 21:21 #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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/// [url]http://www.cyberforum.ru/cpp-beginners/thread1226526.html[/url]
/*
Дан массив, из каждого элемента, начиная со второго,
нужно вычесть все остальные элементы.
вот пример:
1 2 3 4 5
(2 - 3 - 4 - 5 - 1), (3 - 4 - 5 - 1 -2),
(4 - 5 - 1- 2 - 3), (5 -1 -2 -3 -4)
в результате получим:
-11 -9 -7 -5
*/
 
// Подключаем заголовочные файлы:
#include <iostream>     // для ввода-вывода
#include <windows.h>    // для отображения русского языка
 
using namespace std;    // подключаем стандартное пространство имён
 
int main()  // функция main согласно стандарту C++ должна быть типа int
{
    SetConsoleCP(1251);       // для отображения в консоли русского языка
    SetConsoleOutputCP(1251); // для отображения в консоли русского языка
 
    const int sizeArr = 5;  // размер массива
 
    int arr[sizeArr]={1, 2, 3, 4, 5}; // инициализация элементов массива значениями
 
    int sum=0;    // переменная, в которую мы сложим сумму
                  // значений всех элементов массива
 
    // Суммируем значения всех элементов массива:
    for (int i=0; i<sizeArr; i++)
    {
        sum += arr[i];
    }
 
    // Складываем в элементы массива новые значения (отминусованные):
    for (int i=1; i<sizeArr; i++)
    {
        arr[i] += arr[i]-sum;
    }
 
    // Вывод значений элементов массива на экран:
    for (int i=0; i<sizeArr; i++)
    {
        cout << "Значение " << i+1 << "-го\tэлемента, то есть, элемента arr["
             << i << "]\tравно\t" << arr[i] << endl;
    }
 
    return 0;
}
tron737
8 / 8 / 4
Регистрация: 29.12.2013
Сообщений: 27
12.07.2014, 21:35  [ТС] #4
gru74ik, а можешь сделать так, чтобы минусовалось по 10% от каждого элемента?
gru74ik
Модератор
Эксперт CЭксперт С++
4159 / 1785 / 197
Регистрация: 20.02.2013
Сообщений: 4,917
Записей в блоге: 21
12.07.2014, 21:40 #5
Цитата Сообщение от tron737 Посмотреть сообщение
а можешь сделать так
могу

Цитата Сообщение от tron737 Посмотреть сообщение
чтобы минусовалось по 10%
От каждого элемента минусовалось по 10% чего? Самого элемента? Всей суммы значений всех элементов?
tron737
8 / 8 / 4
Регистрация: 29.12.2013
Сообщений: 27
12.07.2014, 21:45  [ТС] #6
10% от каждого элемента, не включая текущий, те Всей суммы значений всех элементов кроме текущего
gru74ik
Модератор
Эксперт CЭксперт С++
4159 / 1785 / 197
Регистрация: 20.02.2013
Сообщений: 4,917
Записей в блоге: 21
12.07.2014, 21:56 #7
Так?
Дан массив, из каждого элемента, начиная со второго,
нужно вычесть по 10% от всех остальных элементов:
1 2 3 4 5
(2 - 0.3 - 0.4 - 0.5 - 0.1), (3 - 0.4 - 0.5 - 0.1 - 0.2),
(4 - 0.5 - 0.1 - 0.2 - 0.3), (5 - 0.1 - 0.2 - 0.3 - 0.4)
Croessmah
Модератор
Эксперт CЭксперт С++
13155 / 7418 / 831
Регистрация: 27.09.2012
Сообщений: 18,256
Записей в блоге: 3
Завершенные тесты: 1
12.07.2014, 21:57 #8
Цитата Сообщение от tron737 Посмотреть сообщение
Дан массив, из каждого элемента, начиная со второго, нужно вычесть все остальные элементы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <numeric>
#include <vector>
#include <iterator>
 
 
int main()
{
   std::vector<int> vec ( std::istream_iterator<int>(std::cin) , (std::istream_iterator<int>()) ) ;
   if ( vec.size() < 2 )
      return 1 ;
   std::cout << "Result: " ;
   for ( std::vector<int>::const_iterator it = vec.begin() + 1 , itEnd = vec.end() ; it != itEnd ; ++it )
      std::cout << *it - std::accumulate ( vec.begin() , vec.end() , 0 ) + *it << ' ' ;
}
tron737
8 / 8 / 4
Регистрация: 29.12.2013
Сообщений: 27
12.07.2014, 21:57  [ТС] #9
да, так
gru74ik
Модератор
Эксперт CЭксперт С++
4159 / 1785 / 197
Регистрация: 20.02.2013
Сообщений: 4,917
Записей в блоге: 21
12.07.2014, 22:12 #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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/// [url]http://www.cyberforum.ru/cpp-beginners/thread1226526.html[/url]
/*
Дан массив, из каждого элемента, начиная со второго,
нужно вычесть по 10% от всех остальных элементов:
1 2 3 4 5
(2 - 0.3 - 0.4 - 0.5 - 0.1), (3 - 0.4 - 0.5 - 0.1 - 0.2),
(4 - 0.5 - 0.1 - 0.2 - 0.3), (5 - 0.1 - 0.2 - 0.3 - 0.4)
в результате получим:
1
0.7
1.8
2.9
4
*/
 
// Подключаем заголовочные файлы:
#include <iostream>     // для ввода-вывода
#include <windows.h>    // для отображения русского языка
 
using namespace std;    // подключаем стандартное пространство имён
 
int main()  // функция main согласно стандарту C++ должна быть типа int
{
    SetConsoleCP(1251);       // для отображения в консоли русского языка
    SetConsoleOutputCP(1251); // для отображения в консоли русского языка
 
    const int sizeArr = 5;  // размер массива
 
    double arr[sizeArr]={1, 2, 3, 4, 5}; // инициализация элементов массива значениями
 
    double sum=0;    // переменная, в которую мы сложим сумму
                     // 10% от значений всех элементов массива
 
    // Суммируем по 10% от значений всех элементов массива:
    for (int i = 0; i<sizeArr; i++)
    {
        sum += arr[i]/10;
        cout << sum << endl;
    }
 
    // Складываем в элементы массива новые значения (отминусованные):
    for (int i = 1; i<sizeArr; i++)
    {
        arr[i] = (arr[i]-sum) + (arr[i]/10);
    }
 
    // Вывод значений элементов массива на экран:
    for (int i = 0; i<sizeArr; i++)
    {
        cout << "Значение " << i+1 << "-го\tэлемента, то есть, элемента arr["
             << i << "]\tравно\t" << arr[i] << endl;
    }
 
    return 0;
}
tron737
8 / 8 / 4
Регистрация: 29.12.2013
Сообщений: 27
12.07.2014, 22:16  [ТС] #11
gru74ik, спасибо, то что нужно, но я почти уже сделал сам)
gru74ik
Модератор
Эксперт CЭксперт С++
4159 / 1785 / 197
Регистрация: 20.02.2013
Сообщений: 4,917
Записей в блоге: 21
12.07.2014, 22:20 #12
Цитата Сообщение от tron737 Посмотреть сообщение
спасибо, то что нужно
Пожалуйста!

Цитата Сообщение от tron737 Посмотреть сообщение
сделал сам
Как по мне, так это самый лучший вариант!
Psilon
Master of Orion
Эксперт .NET
5888 / 4785 / 633
Регистрация: 10.07.2011
Сообщений: 14,405
Записей в блоге: 5
Завершенные тесты: 4
13.07.2014, 03:02 #13
тоже вариант:
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
#include <iostream>
#include <iterator>
#include <vector>
#include <numeric>
 
using namespace std;
 
int main()
{
    int inarray[] = { 1, 2, 3, 4, 5 };
    vector<int> invec(inarray, inarray + sizeof(inarray) / sizeof(int));
    int sum = accumulate(invec.begin(), invec.end(), 0);
    
    vector<int> result;
    for each (int var in invec)
    {
        result.push_back(2*var - sum);
    }
    for each (int res in result)
    {
        cout << res << " ";
    }
    return 0;
}
gray_fox
13.07.2014, 03:47
  #14

Не по теме:

Цитата Сообщение от Psilon Посмотреть сообщение
C++
1
for each (int var in invec)
Это что, C++/CLI?

Psilon
Master of Orion
Эксперт .NET
5888 / 4785 / 633
Регистрация: 10.07.2011
Сообщений: 14,405
Записей в блоге: 5
Завершенные тесты: 4
13.07.2014, 10:24 #15
gray_fox,
Выполняет итерацию по массиву или коллекции. Это нестандартное ключевое слово доступно как в C++/CLI, так и в собственных проектах C++. Однако его использование не рекомендуется. Вместо этого рекомендуется использовать стандартный Основанное на диапазоне выражение for (C++).
IDE дура, в качестве заглушки foreach поставила этот блок. Лучше так, конечно:
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
#include <iostream>
#include <iterator>
#include <vector>
#include <numeric>
 
using namespace std;
 
int main()
{
    int inarray[] = { 1, 2, 3, 4, 5 };
    vector<int> invec(inarray, inarray + sizeof(inarray) / sizeof(int));
    int sum = accumulate(invec.begin(), invec.end(), 0);
    
    vector<int> result;
    for  (int var : invec)
    {
        result.push_back(2*var - sum);
    }
    for  (int res : result)
    {
        cout << res << " ";
    }
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2014, 10:24
Привет! Вот еще темы с ответами:

Вывод на экран каждого второго элемента массива через рекурсивную функцию - C++
Добрый день, подскажите пожалуйста как вывести каждый второй элемент массива с помощью рекурсивной функции? В задаче сказано для...

Найти минимальный элемент матрицы, и, начиная с этого элемента, обнулить остальные - C++
найти минимальный элемент матрицы, и начиная с этого элемента, обнулить остальные. Отсортировать первую строку.

Вычесть из каждого элемента последовательности последний - C++
Даны натурально число n, действительные числа x1, ... , xn (n&gt;=2). Получить последовательность x1 - xn, x2 - xn, ... , xn-1 - xn. Нужно...

Отсортировать все элементы массива по убыванию начиная с отрицательного - C++
1.Отсортировать все элементы массива по убыванию начиная с отрицательного(элемент начала сортировки) примерно такое получится должно: ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.07.2014, 10:24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru