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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.82
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
#1

Развернуть массив, не используя дополнительные массивы и переменные - C++

21.03.2011, 14:04. Просмотров 4085. Ответов 10
Метки нет (Все метки)

Насколько я понял из условия, может быть только 1 цикловая переменная и 1 массив...
Довольно долго думал над этим вопросом, так ничего дельного и не придумал..
Взято из ЕГЭ, С часть.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2011, 14:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Развернуть массив, не используя дополнительные массивы и переменные (C++):

Поменять местами значения целых переменных А и В, не используя дополнительные переменные - C++
Задача 9. Поменять местами значения целых пере¬менных А и В, не используя дополнительные переменные. Задача 39. Во введенной строке...

Создать программу обработки массивов структур используя структурные переменные и переменные типа объеденения - C++
Создать массив структур, каждая из которых состоит из следующих елементов: факультет, курс, группа, фамилия студента и екзаменационная...

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

Не создавая дополнительные массивы, определить какой из элементов потовторяется в последовательсности А1,А2,...Аn., наибольшее число раз - C++
Напишите программу,в которой создается одномерный массив натуральных чисел А1,А2......Аn(n=10). Не создавая дополнительные массивы,...

Развернуть динамический массив - C++
Как правильно инициализировать динамический массив, а потом сделать так чтоб пользователь мог вводить значение каждого елемента массива?...

Сформировать новый массив из старого, добавляя дополнительные элементы - C++
Доброго времени суток! Такая вот задача: Программа формирует новый массив из старого добавляя (2 нуля) если в исходном массиве...

10
neske
1504 / 871 / 84
Регистрация: 26.03.2010
Сообщений: 2,985
21.03.2011, 14:11 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <algorithm>
#include <iterator>
 
int main (void)
{
    const int SIZE=10;
    int MAS[SIZE]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
 
    std::cout << "Before: ";
    std::copy (MAS, MAS+SIZE, std::ostream_iterator <int> (std::cout, " "));
    std::cout << std::endl;
 
    std::reverse (MAS, MAS+SIZE);
 
    std::cout << "After: ";
    std::copy (MAS, MAS+SIZE, std::ostream_iterator <int> (std::cout, " "));
    std::cout << std::endl;
 
    return 0;
}
Ну это так, шутки ради)
1
IrineK
Заблокирован
21.03.2011, 14:20 #3
Для одномерного массива (вектора):
C++
1
2
3
4
5
for(i=0;i<N/2;i++)
       {      temp=A[i];
             A[i]=A[N-1-i];
             A[N-1-i]=temp;
       }
Для двумерного, если разворачиваем по горизонтали (сверху вниз):
C++
1
2
3
4
5
6
for(i=0;i<N/2;i++)
           for(j=0;j<N;j++)
       {      temp[j]=A[i][j];
             A[i][j]=A[N-1-i][j];
             A[N-1-i][j]=temp[j];
       }
Для двумерного с разворотом по вертикали:
C++
1
2
3
4
5
6
for(j=0;j<N/2;j++)
           for(i=0;i<N;i++)
       {      temp[i]=A[i][j];
             A[i][j]=A[i][N-1-j];
             A[i][N-1-j]=temp[i];
       }
2
neske
1504 / 871 / 84
Регистрация: 26.03.2010
Сообщений: 2,985
21.03.2011, 14:21 #4
IrineK, доп. переменные использовать нельзя, у тебя же temp.
1
IrineK
Заблокирован
21.03.2011, 14:24 #5
diagon - Насколько я понял из условия...
Интересно было бы ознакомиться с условием. Может, понимание углубится и расширится?
1
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
21.03.2011, 14:25 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
void _reverse(int *first, int len)
{
  len--;
  for(int i = 0; i < len / 2 + 1; ++i){
    first[i] = first[i] ^ first[len - i];
    first[len - i] = first[i] ^ first[len - i];
    first[i] = first[i] ^ first[len - i];
  }
}
 
int main(void){
  int arr[4] = {4, 3, 2, 1};
  _reverse(arr, 4);
  for(int i = 0; i < 4; ++i)
    printf("%d ", arr[i]);
  return 0;
}
Без доп. памяти.
3
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,215
21.03.2011, 14:26 #7
Цитата Сообщение от IrineK Посмотреть сообщение
temp=A[i];
использование дополнительной переменной temp
может это как старая шутка поменять две переменных
C++
1
2
3
a^=b;
b^=a;
a^=b;
можно сложением/вычитанием
развернуть массив это что?
развернуть можно цикл
может перевернуть??
2
neske
1504 / 871 / 84
Регистрация: 26.03.2010
Сообщений: 2,985
21.03.2011, 14:33 #8
ValeryS, ты прав.
Я и забыл про обмен переменных без использоваться третьей.

Ну тут уже тогда тривиально решается)
1
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.03.2011, 14:39  [ТС] #9
Цитата Сообщение от IrineK Посмотреть сообщение
Интересно было бы ознакомиться с условием. Может, понимание углубится и расширится?
Под рукой задания нет, дословно:Напишите на русском языке или любом языке программирования алгоритм разворота(либо переворота, с терминологией проблемка)массива без использования дополнительных переменных и массивов.
Цитата Сообщение от neske Посмотреть сообщение
ValeryS, ты прав.
Я и забыл про обмен переменных без использоваться третьей.

Ну тут уже тогда тривиально решается)
Слабо представляю, как это можно применить в данном случае... Цикловая переменная то одна.
0
neske
1504 / 871 / 84
Регистрация: 26.03.2010
Сообщений: 2,985
21.03.2011, 14:47 #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
#include <iostream>
#include <iterator>
 
int main (void)
{
    const int SIZE=10;
    int MAS[SIZE]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
 
    std::cout << "Before: ";
    std::copy (MAS, MAS+SIZE, std::ostream_iterator <int> (std::cout, " "));
    std::cout << std::endl;
 
 
    for (int i=0; i<SIZE/2; i++)
    {
        MAS[i]=MAS[i]+MAS[SIZE-i-1];
        MAS[SIZE-i-1]=MAS[i]-MAS[SIZE-i-1];
        MAS[i]-=MAS[SIZE-i-1];
    }
 
 
    std::cout << "After: ";
    std::copy (MAS, MAS+SIZE, std::ostream_iterator <int> (std::cout, " "));
    std::cout << std::endl;
 
    return 0;
}
1
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,215
21.03.2011, 14:47 #11
в качестве a b используй элементы массива
asics, тебе уже написал
1
21.03.2011, 14:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2011, 14:47
Привет! Вот еще темы с ответами:

Строковые переменные (символьные массивы) - C++
Создать две строковые переменные (символьные массивы), содержащие ваше имя и фамилию. Выполнить с ними с помощью строковых функций...

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

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

Развернуть матрицу, как спираль, в линейный массив - C++
Дана квадратная матрица, она заполняется рандомно и выносится на экран. Требуется преобразовать эту матрицу в линейный массив, начиная...


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

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

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