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

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

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

переписать 20 максимальных элементов в массив - C++

29.01.2012, 13:39. Просмотров 357. Ответов 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)))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2012, 13:39     переписать 20 максимальных элементов в массив
Посмотрите здесь:

C++ Переписать пять первых положительных элементов массива подряд в массив У
C++ Отсортировать по уменьшению массив максимальных элементов столбцов матрицы
C++ Сформировать одномерный массив из максимальных элементов строк матрицы
C++ Дан массив А на Н элементов (Н-константа). В массиве найти пять максимальных элементов.
C++ Дан массив а, состоящий из n целых чисел (n < = 100). Найти количество максимальных элементов массива
C++ Дан массив а, состоящий из n целых чисел (n < = 100). Найти количество максимальных элементов массива
Задана матрица целых чисел A(n×n). Сформировать массив B(n) из максимальных элементов столбцов заданной матрицы C++
Сформировать массив состоящий из максимальных элементов столбцов C++
C++ Сформировать новый массив из максимальных элементов двух других
Создать матрицу, из адресов максимальных элементов каждого ряда которой сформировать одномерный массив C++
C++ Сформировать одномерный массив X из максимальных элементов столбцов матрицы A
Сформировать массив B из максимальных по значению элементов каждой строки исходной матрицы A(MxN) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
x1Mike7x
214 / 127 / 6
Регистрация: 06.11.2010
Сообщений: 234
29.01.2012, 17:47     переписать 20 максимальных элементов в массив #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
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
29.01.2012, 19:11     переписать 20 максимальных элементов в массив #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];
                      }
             } */
Т.е. используйте /* и */ для комментирования целых блоков, нежели коммент каждой строчки.
BumerangSP
4284 / 1406 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
29.01.2012, 20:06     переписать 20 максимальных элементов в массив #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.
Мида
0 / 0 / 0
Регистрация: 27.01.2012
Сообщений: 13
29.01.2012, 21:31  [ТС]     переписать 20 максимальных элементов в массив #5
Ребятки, мою благодарность словами не выразить!!!)) 2 ночи не спала, не знала как с этим всем взлететь...вечно в этих индексах теряюсь(((.
С удовольствием разберу все варианты!
Yandex
Объявления
29.01.2012, 21:31     переписать 20 максимальных элементов в массив
Ответ Создать тему
Опции темы

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