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

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

Восстановить пароль Регистрация
 
 
tron737
8 / 8 / 4
Регистрация: 29.12.2013
Сообщений: 27
12.07.2014, 20:40     Из каждого элемента массива, начиная со второго, вычесть все остальные элементы #1
Дан массив, из каждого элемента, начиная со второго, нужно вычесть все остальные элементы.
вот пример:
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++]Все отрицательные элементы массива перенести в начало, а все остальные - в конец C++
C++ В массиве вычислить среднее арифметическое и вычесть его из каждого элемента массива.
Борланд Си++ (Увеличить все элементы массива, начиная с первого положительного) C++
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
Модератор
 Аватар для gru74ik
3068 / 1313 / 164
Регистрация: 20.02.2013
Сообщений: 3,745
Записей в блоге: 15
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
Модератор
 Аватар для gru74ik
3068 / 1313 / 164
Регистрация: 20.02.2013
Сообщений: 3,745
Записей в блоге: 15
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
Модератор
 Аватар для gru74ik
3068 / 1313 / 164
Регистрация: 20.02.2013
Сообщений: 3,745
Записей в блоге: 15
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
Модератор
Эксперт С++
 Аватар для Croessmah
11804 / 6783 / 767
Регистрация: 27.09.2012
Сообщений: 16,838
Записей в блоге: 2
Завершенные тесты: 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
Модератор
 Аватар для gru74ik
3068 / 1313 / 164
Регистрация: 20.02.2013
Сообщений: 3,745
Записей в блоге: 15
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
Модератор
 Аватар для gru74ik
3068 / 1313 / 164
Регистрация: 20.02.2013
Сообщений: 3,745
Записей в блоге: 15
12.07.2014, 22:20     Из каждого элемента массива, начиная со второго, вычесть все остальные элементы #12
Цитата Сообщение от tron737 Посмотреть сообщение
спасибо, то что нужно
Пожалуйста!

Цитата Сообщение от tron737 Посмотреть сообщение
сделал сам
Как по мне, так это самый лучший вариант!
Psilon
Master of Orion
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 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
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 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;
}
tron737
8 / 8 / 4
Регистрация: 29.12.2013
Сообщений: 27
13.07.2014, 12:06  [ТС]     Из каждого элемента массива, начиная со второго, вычесть все остальные элементы #16
Psilon, смотри, у тебя даже из первого элемента вычитается
Psilon
Master of Orion
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 5
Завершенные тесты: 4
13.07.2014, 12:30     Из каждого элемента массива, начиная со второго, вычесть все остальные элементы #17
tron737, невелика беда, можно чуть-чуть изменить
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <iterator>
#include <vector>
#include <numeric>
#include <algorithm>
 
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(inarray+1, inarray + sizeof(inarray) / sizeof(int));
    for_each(result.begin(), result.end(), [sum](int & x) {x -= sum - x; });
    for  (int res : result)
    {
        cout << res << " ";
    }
    return 0;
}
tron737
8 / 8 / 4
Регистрация: 29.12.2013
Сообщений: 27
13.07.2014, 12:33  [ТС]     Из каждого элемента массива, начиная со второго, вычесть все остальные элементы #18
Psilon, я понимаю, что невелика беда. но что-то все равно не так считает, те не под мою задачу
Psilon
Master of Orion
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 5
Завершенные тесты: 4
13.07.2014, 12:35     Из каждого элемента массива, начиная со второго, вычесть все остальные элементы #19
tron737,
в результате получим:
-11 -9 -7 -5
вы писали?
смотрим результат:
http://ideone.com/JYUI1m

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2014, 12:40     Из каждого элемента массива, начиная со второго, вычесть все остальные элементы
Еще ссылки по теме:

Из каждого элемента матрицы A(3,3) вычесть сумму ее положительных элементов C++
C++ найти минимальный элемент матрицы, и начиная с этого элемента, обнулить остальные C++
Как вычесть из каждого элемента одномерного массива каждый элемент другого массива C++

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

Или воспользуйтесь поиском по форуму:
tron737
8 / 8 / 4
Регистрация: 29.12.2013
Сообщений: 27
13.07.2014, 12:40  [ТС]     Из каждого элемента массива, начиная со второго, вычесть все остальные элементы #20
Psilon, ладно спасибо, буду думать.
Yandex
Объявления
13.07.2014, 12:40     Из каждого элемента массива, начиная со второго, вычесть все остальные элементы
Ответ Создать тему
Опции темы

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