8 / 8 / 6
Регистрация: 29.12.2013
Сообщений: 27
1

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

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

Author24 — интернет-сервис помощи студентам
Дан массив, из каждого элемента, начиная со второго, нужно вычесть все остальные элементы.
вот пример:
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

думаю, моя задумка понятна.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2014, 20:40
Ответы с готовыми решениями:

Все элементы массива, начиная со второго, сдвинуть вправо
все элементы массива,начиная со второго,необходимо подвинуть вперед.первому элементу присвоить...

Все элементы массива, начиная со второго, необходимо подвинуть вперед первому элементу
все элементы массива начиная со второго необходимо подвинуть вперед первому элементу присвоить...

Найти четные элементы, начиная с 7-го элемента массива, и нечетне элементы, начиная с 3-го элемента массива
Создать одномерный массив который должен переполняться с генерированными цифрами в диапазоне от -30...

Сдвинуть все элементы массива, начиная с элемента с номером k на одну позицию «влево»
Здравствуйте, помогите пожалуйста написать программу, а то не успеваю. Пусть имеется массив x и x...

20
27 / 26 / 16
Регистрация: 02.12.2013
Сообщений: 79
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;
}
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
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]https://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;
}
0
8 / 8 / 6
Регистрация: 29.12.2013
Сообщений: 27
12.07.2014, 21:35  [ТС] 4
gru74ik, а можешь сделать так, чтобы минусовалось по 10% от каждого элемента?
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
12.07.2014, 21:40 5
Цитата Сообщение от tron737 Посмотреть сообщение
а можешь сделать так
могу

Цитата Сообщение от tron737 Посмотреть сообщение
чтобы минусовалось по 10%
От каждого элемента минусовалось по 10% чего? Самого элемента? Всей суммы значений всех элементов?
0
8 / 8 / 6
Регистрация: 29.12.2013
Сообщений: 27
12.07.2014, 21:45  [ТС] 6
10% от каждого элемента, не включая текущий, те Всей суммы значений всех элементов кроме текущего
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
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)
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 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 << ' ' ;
}
0
8 / 8 / 6
Регистрация: 29.12.2013
Сообщений: 27
12.07.2014, 21:57  [ТС] 9
да, так
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
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]https://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;
}
1
8 / 8 / 6
Регистрация: 29.12.2013
Сообщений: 27
12.07.2014, 22:16  [ТС] 11
gru74ik, спасибо, то что нужно, но я почти уже сделал сам)
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
12.07.2014, 22:20 12
Цитата Сообщение от tron737 Посмотреть сообщение
спасибо, то что нужно
Пожалуйста!

Цитата Сообщение от tron737 Посмотреть сообщение
сделал сам
Как по мне, так это самый лучший вариант!
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
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;
}
0
gray_fox
13.07.2014, 03:47
  #14

Не по теме:

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

0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
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;
}
1
8 / 8 / 6
Регистрация: 29.12.2013
Сообщений: 27
13.07.2014, 12:06  [ТС] 16
Psilon, смотри, у тебя даже из первого элемента вычитается
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
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;
}
0
8 / 8 / 6
Регистрация: 29.12.2013
Сообщений: 27
13.07.2014, 12:33  [ТС] 18
Psilon, я понимаю, что невелика беда. но что-то все равно не так считает, те не под мою задачу
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
13.07.2014, 12:35 19
tron737,
в результате получим:
-11 -9 -7 -5
вы писали?
смотрим результат:
http://ideone.com/JYUI1m

0
8 / 8 / 6
Регистрация: 29.12.2013
Сообщений: 27
13.07.2014, 12:40  [ТС] 20
Psilon, ладно спасибо, буду думать.
0
13.07.2014, 12:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2014, 12:40
Помогаю со студенческими работами здесь

Требуется переписать элементы массива a в массив b, удвоив все элементы, меньшие первого элемента, остальные переписать
Требуется переписать элементы массива a в массив b, удвоив все элементы, меньшие первого элемента,...

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

Требуется из i-го элемента второго массива вычесть среднее значение первого
Объявите в программе два массива 16-битных целых со знаком. Количество элементов массивов должно...

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


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

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

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