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

Массив(чётные и нечётные числа) - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 64, средняя оценка - 4.72
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
19.09.2012, 10:39     Массив(чётные и нечётные числа) #1
помогите, пожалуйста, написать программу:
нужно в массиве, в его начало, поставить сначала все четные числа, а затем нечётные...затем посчитать количество чётных чисел в массиве(массив можно ввести с клавиатуры, а можно через "srand").
Делать это нужно путём перестановки элементов в массиве.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
22.09.2012, 16:58  [ТС]     Массив(чётные и нечётные числа) #21
Цитата Сообщение от BumerangSP Посмотреть сообщение
Micki, нет, программа выдает 123456789 при таком же примере.
а разве не должна выдавать 10? так как не убывающая последовательность состоит из 10 элеиентов? или я где-то чего-то не так понимаю?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
22.09.2012, 17:25     Массив(чётные и нечётные числа) #22
Так: здесь я спросил: http://www.cyberforum.ru/cpp/thread6...ml#post3470579 Ответ был "да". Т.е нужно просто длину вывести?

Добавлено через 11 минут
И еще: Вы вводили через пробелы числа? Тогда это все меняет: я ведь использовал строку, а не массив, отсюда такие различия.
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
22.09.2012, 17:52  [ТС]     Массив(чётные и нечётные числа) #23
Цитата Сообщение от BumerangSP Посмотреть сообщение
Так: здесь я спросил: http://www.cyberforum.ru/cpp/thread6...ml#post3470579 Ответ был "да". Т.е нужно просто длину вывести?

Добавлено через 11 минут
И еще: Вы вводили через пробелы числа? Тогда это все меняет: я ведь использовал строку, а не массив, отсюда такие различия.
упс, ссори...мой косяк. Я Ваш вопрос не так для себя разьяснил. Начнём всё с начала
На экран нужно вывести максимальную длинну неубывающей последовательности какого-то массива(массив можно ввести с помощью "srand", а можно вручную)
Пример: 1 2 3 4 5 6 7 8 9 10
Программа даёт ответ: 10
Я, по сути написал такую программу ,но преподователь забраковал её, приведя ме такой пример при котором программа работает неверно, вот фото: http://www.imageup.ru/img274/1048564/dsc_0136.jpg только вот я уме не приложу, что там не так
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
22.09.2012, 18:02     Массив(чётные и нечётные числа) #24
Micki, мой код в данный момент походит на Ваш. А пример тот самый есть?
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
22.09.2012, 18:39  [ТС]     Массив(чётные и нечётные числа) #25
Цитата Сообщение от BumerangSP Посмотреть сообщение
Micki, мой код в данный момент походит на Ваш. А пример тот самый есть?
на том фото и есть тот самый пример. Там он(преподователь) ввёл(задал) массив из 11 элементов ,а искать максимальную длину неубывающей последовательности он попросил программу среди 10 элементов этого массива...в итоге в ответе печатается 1, хотя по замыслу должна выводить 10.
вот моя программа без изменений преподователя(но там вроде как есть ошибки): http://www.imageup.ru/img247/1050183/dsc_0134.jpg
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
22.09.2012, 19:09     Массив(чётные и нечётные числа) #26
А так прокатит?
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
#include <iostream>
#include <iomanip>
const int n = 5; //размер последовательности
int main()
{
 int i;
 int* a = new int [n];
 std::cout<<"Input "<<n<<" numbers: ";
 for (i=0;i<n;i++)
  std::cin>>a[i];
 std::cout<<'\n';
 for (i=0;i<n;i++)
  std::cout<<a[i]<<std::setw(4); 
 int m=0,k=0;
 int j=1;
 for (i=n-1;i>=-1;i--)
  {
   if (i==0)
    j=0;
   if ((a[i]>=a[i-j])&&(i>=0))
    k++;
   else
    if (k>0)
    {
     if (k>m)
      {     
       m=k;
       if (i>0)
        m++;
      }
     k=0;
    }
   }
 if (m==1)
  m=0;
 std::cout<<std::endl<<"The longest: "<<m<<'\n';
 delete[] a; 
 system("pause");
 return 0;
}
Сорри, на ум больше ничего не приходит(
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
22.09.2012, 19:15  [ТС]     Массив(чётные и нечётные числа) #27
Цитата Сообщение от BumerangSP Посмотреть сообщение
А так прокатит?...Сорри, на ум больше ничего не приходит(
спасибо большое! и как всегда, если можно- каждую строчку расписать? И в кратце принцип действия этой программы(всмысли, что она делает последовательно...т.ч. берёт первый элемент ,сравнивает с предыдущим...меняет местами)
Спасибо
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
22.09.2012, 19:33     Массив(чётные и нечётные числа) #28
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
#include <boost/lambda/lambda.hpp>
 
int main()
{
    using namespace boost::lambda;
    
    srand( time(0) );
    std::vector< int > arr(rand() % 30);
    std::generate(arr.begin(), arr.end(), rand);
    std::cout << "Before: ";
    std::for_each(arr.begin(), arr.end(), std::cout << _1 << " ");
    int even_count = std::partition(arr.begin(), arr.end(), !(_1 % 2) ) - arr.begin();
    std::cout << "\nAfter: ";
    std::for_each(arr.begin(), arr.end(), std::cout << _1 << " ");
    std::cout << "\nEven count: " << even_count << std::endl;
}
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
22.09.2012, 19:44     Массив(чётные и нечётные числа) #29
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <iomanip>
const int n = 5; //размер последовательности
int main()
{
 int i;
 int* a = new int [n];
 std::cout<<"Input "<<n<<" numbers: ";
 for (i=0;i<n;i++)
  std::cin>>a[i];
 std::cout<<'\n';
 for (i=0;i<n;i++)
  std::cout<<a[i]<<std::setw(4); 
 int m=0,k=0;
 int j=1;
 for (i=n-1;i>=-1;i--) //начинаем чтения массива с конца
  {
   if (i==0) //предотвращение ошибки чтения за границей массива (в начале)
    j=0;
   if ((a[i]>=a[i-j])&&(i>=0)) //сравнение
    k++;
   else
    if (k>0) //если нашли хоть что-то
    {
     if (k>m)
      {     
       m=k; //записываем
       if (i>0) //на случай, если послед-ть не на краях массива
        m++;
      }
     k=0;
    }
   }
 if (m==1) //в случаях, когда посл-ти вообще нет, может выйти 1, тоже исправляем
  m=0;
 std::cout<<std::endl<<"The longest: "<<m<<'\n';
 delete[] a; 
 system("pause");
 return 0;
}
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
24.09.2012, 21:18  [ТС]     Массив(чётные и нечётные числа) #30
Цитата Сообщение от BumerangSP Посмотреть сообщение
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <iomanip>
const int n = 5; //размер последовательности
int main()
{
 int i;
 int* a = new int [n];
 std::cout<<"Input "<<n<<" numbers: ";
 for (i=0;i<n;i++)
  std::cin>>a[i];
 std::cout<<'\n';
 for (i=0;i<n;i++)
  std::cout<<a[i]<<std::setw(4); 
 int m=0,k=0;
 int j=1;
 for (i=n-1;i>=-1;i--) //начинаем чтения массива с конца
  {
   if (i==0) //предотвращение ошибки чтения за границей массива (в начале)
    j=0;
   if ((a[i]>=a[i-j])&&(i>=0)) //сравнение
    k++;
   else
    if (k>0) //если нашли хоть что-то
    {
     if (k>m)
      {     
       m=k; //записываем
       if (i>0) //на случай, если послед-ть не на краях массива
        m++;
      }
     k=0;
    }
   }
 if (m==1) //в случаях, когда посл-ти вообще нет, может выйти 1, тоже исправляем
  m=0;
 std::cout<<std::endl<<"The longest: "<<m<<'\n';
 delete[] a; 
 system("pause");
 return 0;
}
а можешь на словах объяснить принцип этого алгоритма? К примеру: берётся последний элемент массива, сравнивается с предпоследним, если он меньше предпоследнего, то k увеличиваем на один...если к больше m, то k=m...т.ч мне не понятна переменная j
Цитата Сообщение от BumerangSP Посмотреть сообщение
int m=0,k=0;
int j=1;
for (i=n-1;i>=-1;i--) //начинаем чтения массива с конца
{
if (i==0)
j=0;
if ((a[i]>=a[i-j])&&(i>=0)) //сравнение
k++;
П.с: понимаю, что уже надоел вам, но хотелось бы до конца разобраться в поставленной задаче
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
24.09.2012, 23:11     Массив(чётные и нечётные числа) #31
Кликните здесь для просмотра всего текста
j - это как бы исправление небольшое. Изначальная равна единице. a[i-j] - это все равно что a[i-1], т.е. там идет сравнение текущего с предыдущим (потому что с конца в начало идем). if (i==0) j=0; - когда достигли начала массива, то чтобы не было выхода за границы диапазона, мы делаем j=0. Получается, текущий сравнивается с текущим (a[i] с a[i-j] при j=0). Это как раз и нужно, т.к. при сравнении всегда не хватает одного элемента (т.е. значение k должно быть на один больше. Этим сравнением мы и перекрываем недостаток).
Метод не ахти, можно было намного проще и удобней написать.)
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
25.09.2012, 08:48  [ТС]     Массив(чётные и нечётные числа) #32
Цитата Сообщение от BumerangSP Посмотреть сообщение
Кликните здесь для просмотра всего текста
j - это как бы исправление небольшое. Изначальная равна единице. a[i-j] - это все равно что a[i-1], т.е. там идет сравнение текущего с предыдущим (потому что с конца в начало идем). if (i==0) j=0; - когда достигли начала массива, то чтобы не было выхода за границы диапазона, мы делаем j=0. Получается, текущий сравнивается с текущим (a[i] с a[i-j] при j=0). Это как раз и нужно, т.к. при сравнении всегда не хватает одного элемента (т.е. значение k должно быть на один больше. Этим сравнением мы и перекрываем недостаток).
Метод не ахти, можно было намного проще и удобней написать.)
главное чтобы работало корректно(а так оно и есть)...Спасибо!
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
26.09.2012, 12:30  [ТС]     Массив(чётные и нечётные числа) #33
Цитата Сообщение от BumerangSP Посмотреть сообщение
for (int i=0; i<n; i++)
for (int j=i; j<n; j++) //двумя циклами перебираем все элементы массива
if (a[j] % 2 == 0) //если элемент четный
{
int k = a[i]; //меняем местами элемент с j-м индексом на
a[i]=a[j]; //элемент с i-м
a[j]=k; //таким образом сначала выходят все четные, а потом нечетные
}
А можещь ещё в программе, где нужно было в начале массива разместить все чётные числа и подсчитать их количество обЪяснить вот эти строки...т.ч. мну не понятна строка " for (int j=i; j<n; j++)" и зачем мы сначала ищем чётные элементы по j-индексу, а в конце считаем количество чётных элементво по i- индексу..
Цитата Сообщение от BumerangSP Посмотреть сообщение
if (a[j] % 2 == 0) //если элемент четный

if (a[i] % 2 == 0) //определяем количество четных
kol++;
хотя я и осознаю всю глупость второго вопроса, но хотябы ответте на первый, что делает второй цикл for?
Цитата Сообщение от BumerangSP Посмотреть сообщение

for (int j=i; j<n; j++)
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
26.09.2012, 13:33     Массив(чётные и нечётные числа) #34
for (int j=i; j<n; j++)
Этим мы сортируем элементы. Поэкспериментируйте с j и станет понятно, почему он с i начинается.
Количество можно и так найти:
C++
1
2
3
4
5
6
7
8
9
10
11
12
 for (int i=0; i<n; i++)
  {
        for (int j=i; j<n; j++) 
   if (a[j] % 2 == 0)
    {
     int k = a[i];
     a[i]=a[j];
     a[j]=k;
    }   
             if (a[i] % 2 == 0)
    kol++;
            }
Просто двигаться нужно от начала массива. А второй (вложенный, с j который) цикл проходит n раз, нам нужно только 1. Поэтому я и считал в другом цикле, который для вывода на экран нужен. Какая разница где считать?) В таком небольшом коде.
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
26.09.2012, 14:28  [ТС]     Массив(чётные и нечётные числа) #35
Благодарю
И последний, надеюсь, вопрос- для чего в условии if нужно второе условие...т.ч. ...&&(i>=0)
Цитата Сообщение от BumerangSP Посмотреть сообщение
C++
1
   if ((a[i]>=a[i-j])&&(i>=0)) //сравнение
и как понять вот это- "на случай, если послед-ть не на краях массива"
Цитата Сообщение от BumerangSP Посмотреть сообщение
C++
1
2
   if (i>0) //на случай, если послед-ть не на краях массива
        m++;
это там, где неубывающую последовательность надо было найти
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
26.09.2012, 14:44     Массив(чётные и нечётные числа) #36
1) i может быть меньше нуля, тогда выход за границы массива.
2) Пример:
132112343231
Послед-ть в данном случае не на крае массива (т.е., например, не в самом начале), а где-то в середине. Тут надо прибавить 1 к m.
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
26.09.2012, 16:04  [ТС]     Массив(чётные и нечётные числа) #37
Цитата Сообщение от BumerangSP Посмотреть сообщение
2) Пример:
132112343231
Послед-ть в данном случае не на крае массива (т.е., например, не в самом начале), а где-то в середине. Тут надо прибавить 1 к m.
вот в том-то и дело, что я не могу понять почему если последовательность не на краях массива нужно к m прибовлять 1...(

Добавлено через 38 минут
Цитата Сообщение от Micki Посмотреть сообщение
вот в том-то и дело, что я не могу понять почему если последовательность не на краях массива нужно к m прибовлять 1...(
также мне не очень и понятно это
Цитата Сообщение от BumerangSP Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
 for (int i=0; i<n; i++)
  for (int j=i; j<n; j++)  //двумя циклами перебираем все элементы массива
   if (a[j] % 2 == 0) //если элемент четный
    {
     int k = a[i]; //меняем местами элемент с j-м индексом на 
     a[i]=a[j];    //элемент с i-м 
     a[j]=k; //таким образом сначала выходят все четные, а потом нечетные
    }
второй for(с индексом j) я так понимаю это вложенный цикл в первый for...два этих цикла перебирают все элементы массива, затем чётные элементы меняются с нечётными местами, но как это происходит я себе не вполне представляю...
П.с: извините, что гружу Вас...но понять всё же хочется)
П.с.с: возможно я где-то чего-то и напутал, возможно мои вопросы неосознанно глупы...прошу указать на это, если так и есть)
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
26.09.2012, 16:23     Массив(чётные и нечётные числа) #38
Кликните здесь для просмотра всего текста
Цитата Сообщение от Micki Посмотреть сообщение
вот в том-то и дело, что я не могу понять почему если последовательность не на краях массива нужно к m прибавлять 1...(
Это надо по шагам рассматривать. Вам опыт надо нарабатывать, чтобы понимать действия в коде.
Пример:
дано: 32123. Сравнение идет с конца, т.е. сначала сравниваем 3 и 2. Условие (a[i]>=a[i-j])&&(i>=0) выполняется, увеличиваем k, далее 2 и 1, опять увеличиваем. Итого k уже равно 2. Далее сравниваем 1 и 2, условие не выполняется, а это значит, что мы переходим сюда:
C++
1
2
3
4
5
6
7
8
9
10
11
else
    if (k>0)
    {
     if (k>m)
      {     
       m=k;
       if (i>0)
        m++;
      }
     k=0;
    }
Но получается, что последовательность у нас состоит из 3-х чисел, а k равно 2, притом мы еще не дошли до начала (еще число 3 не проверено, например, отсюда i=2, а a[i]=1 (индексация массива с нуля)) Поэтому мы прибавляем еще 1.
Другой пример: 1232. Сравниваем...В итоге при i=1 у нас k равно 2. Далее i будет = 0, но если мы сравним a[0] и a[0-j] при j=1 (a[i-1] не существует) в a[-1] содержится всякий мусор, поэтому сравнение с ним будет некорректным. Исправляет эту ситуацию вот это условие:
C++
1
2
 if (i==0)
    j=0;
Получается, что a[0] сравнивается с самим собой и нет необходимости прибавлять единицу к m, поэтому условие
C++
1
2
if (i>0) //на случай, если послед-ть не на краях массива
        m++;)
здесь является нецелесообразным.
Надеюсь, доступно объяснил.
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
26.09.2012, 19:04  [ТС]     Массив(чётные и нечётные числа) #39
Цитата Сообщение от BumerangSP Посмотреть сообщение
Кликните здесь для просмотра всего текста

Это надо по шагам рассматривать. Вам опыт надо нарабатывать, чтобы понимать действия в коде.
Пример:
дано: 32123. Сравнение идет с конца, т.е. сначала сравниваем 3 и 2. Условие (a[i]>=a[i-j])&&(i>=0) выполняется, увеличиваем k, далее 2 и 1, опять увеличиваем. Итого k уже равно 2. Далее сравниваем 1 и 2, условие не выполняется, а это значит, что мы переходим сюда:
C++
1
2
3
4
5
6
7
8
9
10
11
else
    if (k>0)
    {
     if (k>m)
      {     
       m=k;
       if (i>0)
        m++;
      }
     k=0;
    }
Но получается, что последовательность у нас состоит из 3-х чисел, а k равно 2, притом мы еще не дошли до начала (еще число 3 не проверено, например, отсюда i=2, а a[i]=1 (индексация массива с нуля)) Поэтому мы прибавляем еще 1.
Другой пример: 1232. Сравниваем...В итоге при i=1 у нас k равно 2. Далее i будет = 0, но если мы сравним a[0] и a[0-j] при j=1 (a[i-1] не существует) в a[-1] содержится всякий мусор, поэтому сравнение с ним будет некорректным. Исправляет эту ситуацию вот это условие:
C++
1
2
 if (i==0)
    j=0;
Получается, что a[0] сравнивается с самим собой и нет необходимости прибавлять единицу к m, поэтому условие
C++
1
2
if (i>0) //на случай, если послед-ть не на краях массива
        m++;)
здесь является нецелесообразным.
Надеюсь, доступно объяснил.
ух, куча благодарностей Вам! объяснили так, что вопросов не осталось никаких по данному коду)

Добавлено через 2 часа 25 минут
Цитата Сообщение от BumerangSP Посмотреть сообщение
Кликните здесь для просмотра всего текста

Это надо по шагам рассматривать. Вам опыт надо нарабатывать, чтобы понимать действия в коде.
Пример:
дано: 32123. Сравнение идет с конца, т.е. сначала сравниваем 3 и 2. Условие (a[i]>=a[i-j])&&(i>=0) выполняется, увеличиваем k, далее 2 и 1, опять увеличиваем. Итого k уже равно 2. Далее сравниваем 1 и 2, условие не выполняется, а это значит, что мы переходим сюда:
C++
1
2
3
4
5
6
7
8
9
10
11
else
    if (k>0)
    {
     if (k>m)
      {     
       m=k;
       if (i>0)
        m++;
      }
     k=0;
    }
Но получается, что последовательность у нас состоит из 3-х чисел, а k равно 2, притом мы еще не дошли до начала (еще число 3 не проверено, например, отсюда i=2, а a[i]=1 (индексация массива с нуля)) Поэтому мы прибавляем еще 1.
Другой пример: 1232. Сравниваем...В итоге при i=1 у нас k равно 2. Далее i будет = 0, но если мы сравним a[0] и a[0-j] при j=1 (a[i-1] не существует) в a[-1] содержится всякий мусор, поэтому сравнение с ним будет некорректным. Исправляет эту ситуацию вот это условие:
C++
1
2
 if (i==0)
    j=0;
Получается, что a[0] сравнивается с самим собой и нет необходимости прибавлять единицу к m, поэтому условие
C++
1
2
if (i>0) //на случай, если послед-ть не на краях массива
        m++;)
здесь является нецелесообразным.
Надеюсь, доступно объяснил.
а можете, если не затруднит, также расписать действие вот этого цикла
Цитата Сообщение от BumerangSP Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 for (int i=0; i<n; i++)
  for (int j=i; j<n; j++)  //двумя циклами перебираем все элементы массива
   if (a[j] % 2 == 0) //если элемент четный
    {
     int k = a[i]; //меняем местами элемент с j-м индексом на 
     a[i]=a[j];    //элемент с i-м 
     a[j]=k; //таким образом сначала выходят все четные, а потом нечетные
    }    
 for (int i=0; i<n; i++) //циклом по элементам
  {
   if (a[i] % 2 == 0) //определяем количество четных
    kol++;
   std::cout<<a[i]<<std::setw(4); //и попутно выводим на экран измененный массив
  }
пожалуйста
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2012, 20:19     Массив(чётные и нечётные числа)
Еще ссылки по теме:

Дан массив из N элементов. В нём чётные числа заменить на 0, а нечётные на -1 C++
Чётные и нечётные номера элементов массивов C++

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

Или воспользуйтесь поиском по форуму:
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
26.09.2012, 20:19     Массив(чётные и нечётные числа) #40
Кликните здесь для просмотра всего текста
А тут что? Цикл первый? Здесь каждый j-й элемент сравнивается n-i раз со всеми последующими.
Дан массив: 1 3 7 2 4 2 4. Проходим по ним циклами: сначала a[i] при i=0. При j=i, т.е. 0 проходим до n-1. При этом мы ищем четный элемент. a[0]=1. Вторым циклом находим четный элемент, т.е 2 (a[3]) и меняем его местами с a[i]-ым. Получается так: 2 3 7 1 4 2 4. Берем второй элемент. Начинаем второй цикл от него, т.к. нет смысла начинать с начала (у нас там уже стоит четный элемент). Находим a[j]=4, меняем местами с a[i]=3. 2 4 7 1 3 2 4. Таким образом смещаем все четные влево, нечетные при этом вытеснятся вправо.
Yandex
Объявления
26.09.2012, 20:19     Массив(чётные и нечётные числа)
Ответ Создать тему
Опции темы

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