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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.82
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.03.2011, 14:04     Развернуть массив, не используя дополнительные массивы и переменные #1
Насколько я понял из условия, может быть только 1 цикловая переменная и 1 массив...
Довольно долго думал над этим вопросом, так ничего дельного и не придумал..
Взято из ЕГЭ, С часть.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,693
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;
}
Ну это так, шутки ради)
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];
       }
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,693
21.03.2011, 14:21     Развернуть массив, не используя дополнительные массивы и переменные #4
IrineK, доп. переменные использовать нельзя, у тебя же temp.
IrineK
Заблокирован
21.03.2011, 14:24     Развернуть массив, не используя дополнительные массивы и переменные #5
diagon - Насколько я понял из условия...
Интересно было бы ознакомиться с условием. Может, понимание углубится и расширится?
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
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;
}
Без доп. памяти.
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
21.03.2011, 14:26     Развернуть массив, не используя дополнительные массивы и переменные #7
Цитата Сообщение от IrineK Посмотреть сообщение
temp=A[i];
использование дополнительной переменной temp
может это как старая шутка поменять две переменных
C++
1
2
3
a^=b;
b^=a;
a^=b;
можно сложением/вычитанием
развернуть массив это что?
развернуть можно цикл
может перевернуть??
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,693
21.03.2011, 14:33     Развернуть массив, не используя дополнительные массивы и переменные #8
ValeryS, ты прав.
Я и забыл про обмен переменных без использоваться третьей.

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

Ну тут уже тогда тривиально решается)
Слабо представляю, как это можно применить в данном случае... Цикловая переменная то одна.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,693
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2011, 14:47     Развернуть массив, не используя дополнительные массивы и переменные
Еще ссылки по теме:

C++ Не создавая дополнительные массивы, определить какой из элементов потовторяется в последовательсности А1,А2,...Аn., наибольшее число раз
Развернуть матрицу, как спираль, в линейный массив C++
C++ Создать программу обработки массивов структур используя структурные переменные и переменные типа объеденения

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
21.03.2011, 14:47     Развернуть массив, не используя дополнительные массивы и переменные #11
в качестве a b используй элементы массива
asics, тебе уже написал
Yandex
Объявления
21.03.2011, 14:47     Развернуть массив, не используя дополнительные массивы и переменные
Ответ Создать тему
Опции темы

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