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

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

Войти
Регистрация
Восстановить пароль
 
Мида
0 / 0 / 0
Регистрация: 27.01.2012
Сообщений: 13
#1

Переписать в другой массив 20 максимальных элементов из исходного - C++

29.01.2012, 13:39. Просмотров 379. Ответов 4
Метки нет (Все метки)

Создать массив из случайных 100 четырехзначных элементов. Переписать в массив из 20 элементов 20 самых больших чисел из первого массива. Нельзя создавать временный массив, сортировать 100-элементный)
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
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
   // const int size = 10;
    int A[10], B[5];
     int imax = 0, j=0;
    cout << "first array" << "\n";
 
   srand(time(0));
    for(int i = 0; i <10; i++)
       {
        A[i] = rand() % 9000 + 1000;//создаем массив
        cout << A[i] << "\n";//выводим
         }
    
        for(int i = 1; i <10; i++)
             {    
               if(A[imax] < A[i])
                  {
                    imax = i;  
                    j=imax;
                   
                   }
 
                 }
                 cout<< "MAX = " << A[imax] << "(" << imax + 1 << " element)\n";   //выводим максимальный (это я себе для проверки)
}
        
    //  for(int i=0; i<5; i++)
        //{
        //  if ( A[i]==A[imax])  //вот тут както надо??
        //  {
        //      B[i]=A[imax];
        //     cout<<B[i];
        //  }
    //  }
    return 0;
 
}

1.Не могу понять как создать цикл, находящий максимальный элемент из оставшихся, не выбранных
2.и как из него слепить новый массив?((
Подскажите, если можете...
(векторы ещё не учили, лепим из минимальных знаний)

Добавлено через 2 минуты
Для упрощения я оба массива уменьшила на 10 и 5)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2012, 13:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переписать в другой массив 20 максимальных элементов из исходного (C++):

Переписать пять первых положительных элементов массива подряд в другой массив - C++
Люди добрые, помогите решить пару задач на С++ на одномерные и двумерные массивы (я новичок и мало что в этом соображаю): 1)Дан массив Х....

Переписать в другой файл последовательного доступа те элементы исходного, которые кратные К - C++
Вот в такой задачке нужна помощь: Записать в файл последовательного доступа N произвольных натуральных чисел. Переписать в другой файл...

Переписать в массив B сначала отрицательные, а затем положительные элементы исходного массива - C++
Помогите пожалуйста решить эти задачки... 1. Одномерные массивы Переписать в массив B(N) сначала отрицательные, а затем...

Переписать произвольный одномерный массив в другой массив в обратном порядке - C++
Помогите написать прогу, вот задание. Переписать произвольный одномерный массив в другой массив в обратном порядке.

Дан массив А на Н элементов (Н-константа). В массиве найти пять максимальных элементов. - C++
Дан массив А на Н элементов (Н-константа). В массиве найти пять максимальных элементов. Написать программу по шагам. Добавлено через...

Переписать двузначные числа в другой массив - C++
Написать задачу на с++ ]П.5.18.Правил Запрещено размещать задания и решения в виде картинок и других файлов с их текстом. Перепишите...

4
x1Mike7x
217 / 130 / 6
Регистрация: 06.11.2010
Сообщений: 234
29.01.2012, 17:47 #2
Можно так:
ищем максимальный элемент в массиве с 1го по последний, когда нашли - значение заносим в массив Б и меняем местами значения в массиве А с индексом 1 ( ну, если адрессация с 1 в массиве ) и индексом максимального элемента. Для второго элемента проделываем тоже самое, только ищем с 2го элемента и меняем местами на 2й элемент.
+ К тому же сам обмен между элементами с индексами i и максимальным производить не надо, поскольку элемент A[ i ] на след. итерации интересовать нас не будет, поэтому можно просто присвоить A[ максимум ] значение A[ i ].
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int A[ 10 ] = { 4, 5, 6, 12, 31, 13, 1, 3, 2, 68 };
int B[ 5 ];
 
for ( int i = 0; i < 5; ++i )
{
    int indMax = i;
    for ( int j = i; j < 10; ++j )
        if ( A[ indMax ] < A[ j ] )
            indMax = j;
    
    B[ i ] = A[ indMax ];
    
    A[ indMax ] = A[ i ];
}
http://ideone.com/xrREc
1
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
29.01.2012, 19:11 #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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
int main()
{
    int A[100] = {NULL}, B[20] = {NULL};
    int imax = 0, j=0, i, lmax=0;
    cout << "first array" << "\n";
 
   srand(time(0));
 
   // заполняем массив
    for(i = 0; i <100; i++)
       {
        A[i] = rand() % 9000 + 1000;//создаем массив
        cout << A[i] << "\n";//выводим
         }
 
    // найдем максимальный элемент массива
            for(i = 0; i <100; i++)
             {    
               if(lmax < A[i])
                    lmax = A[i];
                    } 
        B[0]=lmax;
 
    // ищем максимумы и записываем в конечный массив
        for(j=1;j<20;j++) {
        for(i = 0; i<100; i++)
             {    
                 if(imax<A[i] && A[i]<lmax){
                    imax = A[i];
                    }
        }
                    B[j] = imax;
                    lmax = imax;  
                    imax=0;
                               
        }
        cout << "finish: " << "\n";
            for(i = 0; i <20; i++)
       {
        cout << B[i] << "\n";//выводим
         }
    return 0;
 
}
Вот вам решение
lmax - предыдущий максимальный элемент. Опираемся на него, чтобы найти след. макс. элемент ))

И, если разрешите, попытка облегчить написание в будущем:
Вместо
C++
1
2
3
4
5
6
7
8
        //      for(int i=0; i<5; i++)
                //{
                //      if ( A[i]==A[imax])  //вот тут както надо??
                //      {
                //              B[i]=A[imax];
                //         cout<<B[i];
                //      }
        //      }
Пишите
C++
1
2
3
4
5
6
7
8
              /*      for(int i=0; i<5; i++)
                {
                      if ( A[i]==A[imax])  //вот тут както надо??
                      {
                              B[i]=A[imax];
                         cout<<B[i];
                      }
             } */
Т.е. используйте /* и */ для комментирования целых блоков, нежели коммент каждой строчки.
2
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
29.01.2012, 20:06 #4
Эх, пока делал, другие тоже успели
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
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int A[10], B[5];
     int max, j=0,i,k=0;
    cout << "first array" << "\n";
    srand(time(NULL));
    for(i = 0; i <10; i++)
     {
      A[i] = rand() % 9000 + 1000;//создаем массив
      cout << A[i]<<" ";//выводим
     }
    cout<<"\n";
    for(j=0; j<5; j++)      
        {
         max=A[0];
         for(i=0; i<10; i++)    
          if(A[i]>max)
           {
            max = A[i]; 
           }
         for(i=0; i<10; i++)
          if (A[i]==max)
           A[i]=0;
         B[k]=max;
         k++;  
         cout<<B[j]<<" ";
         
        }
       cout<<"\n";                                                                           
    getchar();            
    return 0; 
}
Ваш пример с размерностями 10 и 5.
2
Мида
0 / 0 / 0
Регистрация: 27.01.2012
Сообщений: 13
29.01.2012, 21:31  [ТС] #5
Ребятки, мою благодарность словами не выразить!!!)) 2 ночи не спала, не знала как с этим всем взлететь...вечно в этих индексах теряюсь(((.
С удовольствием разберу все варианты!
0
29.01.2012, 21:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2012, 21:31
Привет! Вот еще темы с ответами:

Переписать случайные элементы в другой массив - C++
Доброго всем здравия, душевного и телесного! Написал код, который из массива хаотично берет элементы и записывает их в другой массив. Все...

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

Переписать в другой массив элементы кратные двум - C++
Условие задачи: Задан массив А(N). Получить из него массив В, состоящий из элементов массива А, которые кратны двум. Эту задачу нужно...

Переписать в другой массив отрицательные элементы массива - C++
Ребят, помогите, пожалуйста. Нужно написать программу: записать в массив В целых чисел в порядке возрастания отрицательные элементы массива...


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

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

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