Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
14 / 14 / 3
Регистрация: 19.09.2009
Сообщений: 289
1

Очень интересная головоломка..

15.12.2009, 13:54. Показов 920. Ответов 12
Метки нет (Все метки)

Дан массив целых чисел (n=10);

Переставить элементы след образом

a[1],a[10],a[2],a[9],a[3],a[8].....

Целый день думаю, ничего на ум не приходит...
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.12.2009, 13:54
Ответы с готовыми решениями:

Интересная головоломка
1.С помощью текстового редактора создать файл который содержит текст.Длина ряда с текстом не должна...

интересная головоломка
помоготе решить задачу про спички я уже неделю голову ломаю....Даны n-спичек и 2 игрока,каждый...

Головоломка с матрицей. Очень интересно!
Не в корысных целях(мне эта программа не нужна, просто интересно стало, как такое реализовать)...

очень интересная задание
Паша очень любит готовить сэндвичи. Свой фирменный сэндвич «Купе» он готовит из четырех главных...

12
423 / 227 / 87
Регистрация: 25.03.2009
Сообщений: 744
15.12.2009, 14:04 2
BOR1K,
C++
1
for (size_t i = 0 ; i < n ; i++) { int temp = a[i] ; a[i] = a[n-1-i] ; a[n-1-i] = temp;}
0
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,020
15.12.2009, 14:05 3
Да тут все просто
Можно сделать что то типа этого:
C
1
2
3
4
5
6
for(i=0;i<n-1;i++)
{
for(j=n-1;j>i;j--) a[j+1]=a[j];
a[i+1]=a[n-i];
i=i+2;
}
Код правда не отлаживал, могут быть ошибки.
0
42 / 42 / 7
Регистрация: 08.11.2009
Сообщений: 167
15.12.2009, 14:06 4
C++
1
2
for(int i = 0; i < 10; i++)
    b[i] = (i%2==0) ? a[i/2] : a[9-i/2];
0
14 / 14 / 3
Регистрация: 19.09.2009
Сообщений: 289
15.12.2009, 14:08  [ТС] 5
а у мну такой вариант был)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include "conio.h"
 
int _tmain(int argc, _TCHAR* argv[])
{int m[20],n=10;
for(int i=0;i<n;i++)
{printf("#%d=",i);
scanf("%d",&m[i]);}
//решение
for(int j=0;j<10;j++)
{for(int i=20;i>j+1;i--)
{m[i+1]=m[i];
 m[j]=m[20-i];
}}
 
    
for(int i=0;i<19;i++)
{printf("%d",m[i]);}
 
getch();
return 0;
}
0
135 / 132 / 30
Регистрация: 08.12.2009
Сообщений: 565
Записей в блоге: 3
15.12.2009, 14:08 6
вот
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
uses crt;
const n=10;
var a:array [1..10] of real;b:integer;
begin
for b:=1 to n do
begin
a[b]:=int(100*random)-50;
writeln(a[b]);
end;
writeln('        ');
for b:=1 to n do
begin
writeln(a[0+1]);writeln(a[10-1]);end;
readln
end.
0
42 / 42 / 7
Регистрация: 08.11.2009
Сообщений: 167
15.12.2009, 14:13 7
а теперь все взяли и запустили свои программки, чтоб убедиться что у всех вышла полная лажа

я так понял что массив только один и вспомогательными пользоваться нельзя?
0
14 / 14 / 3
Регистрация: 19.09.2009
Сообщений: 289
15.12.2009, 14:15  [ТС] 8
да один, но можно его взять в 2 раза больше.
0
Эксперт С++
2336 / 1709 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
15.12.2009, 14:22 9
Цитата Сообщение от Андрейка Посмотреть сообщение
C++
1
for (size_t i = 0 ; i < n ; i++) { int temp = a[i] ; a[i] = a[n-1-i] ; a[n-1-i] = temp;}
Это реверс.
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
#include <iostream>
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  const int n = 10;
  int arr[n] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
 
  std::cout << "Начальная последовательность" << std::endl;
 
  for(int i = 0; i < n; ++i)
    std::cout << arr[i] << " ";
  
  std::cout << std::endl;
 
  int res[n];
 
  for(int i = 0; i < n; ++i)
    res[i] = i % 2 ?  arr[n - 1 - i / 2] : arr[i / 2];
 
  
  std::cout << "Переставленная последовательность" << std::endl;
 
  for(int i = 0; i < n; ++i)
    std::cout << res[i] << " ";
 
  std::cout << std::endl;
 
  system("pause");
 
  return 0;
}
Добавлено через 4 минуты
Цитата Сообщение от BOR1K Посмотреть сообщение
да один, но можно его взять в 2 раза больше.
А смысл? Памяти от использования одного массива размером 20 уйдет столько же сколько от использования 2 массивов размером 10.
1
14 / 14 / 3
Регистрация: 19.09.2009
Сообщений: 289
15.12.2009, 14:24  [ТС] 10
Спасибо. Но все же не могу понять в чем подвох задачи, если ее решать через 1 массив, у меня были предположения правильного решения через 2 массива сразу))
0
423 / 227 / 87
Регистрация: 25.03.2009
Сообщений: 744
15.12.2009, 14:26 11
CyBOSSeR, аа да прогнал ) не так условие прочитал)
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10988 / 6951 / 1639
Регистрация: 25.07.2009
Сообщений: 12,660
15.12.2009, 16:08 12
Цитата Сообщение от BOR1K Посмотреть сообщение
да один, но можно его взять в 2 раза больше.
Вот с этого и начинали бы
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
#include <stdio.h>
#define ARR_SIZE 10
 
int main(void){
    int arr[ARR_SIZE * 2] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int *h, *t, *o, i;
    
    printf("Original: ");
    for ( h = arr; h < arr + ARR_SIZE; h++ )
        printf("%d ", *h);
    printf("\n");
    
    for ( h = arr, t = arr + ARR_SIZE - 1, o = arr + ARR_SIZE; h < t; h++, t-- ){
        *o++ = *h;
        *o++ = *t;
    }
    if ( h == t ) /*  это, если бы количество элементов было нечётное */
        *o = *h;
    for ( h = arr, t = o = arr + ARR_SIZE; h < t; h++, o++ ){
        i = *h;
        *h = *o;
        *o = i;
    }
    
    printf("Processed: ");
    for ( h = arr; h < arr + ARR_SIZE; h++ )
        printf("%d ", *h);
    printf("\n");
    
    
    return 0;
}
0
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
15.12.2009, 19:20 13
Предложу и свой неказистый вариант.Даже не ручаюсь,правильная ли там логика,проверьте. Но вроде работает.
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
#include <iostream>
 
  int main ()
  {
     int a[] = {1,2,3,4,5,6,7,8,9,10};
     int max = 9;
     int temp,last = max;
     
     // Необходимо запомнить последний элемент,
     // а затем сдвинуть все элементы вправо,
     // после чего последний элемент вставляется на
     // место самого левого в сдвигаемом ряде.
     // Шаг сдвига равен 2.
     for (int i = 1; i < max; i+=2)
     {
        temp = a[last];
        for (int j = last; j > i; --j)
        {
           a[last] = a[last-1];
           --last;
        }
        a[i] = temp;
        last = max;
     }
     
     for (int i = 0; i <= 9; ++i)
        std::cout << a[i] << ' ';
        
     return 0;
  }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2009, 19:20

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Очень интересная задачка на C++
Исследовать сходимость ряда Фурье по косинусам для функции f(x)=l-x на отрезке ,l=1. Определить,...

Очень интересная задача, не все смогут
Напишите программу, использующую рекурсию, определяющую положение восьми ферзей на шахматной доске,...

очень интересная загадка по мотивам одной известной истории=)
Вы, наверное, слышали историю о том, как один могуществен-ный правитель обещал наградить ученого,...

интересная головоломка
Стал изучать lwjgl(движок ява для создания игр) и столкнулся с проблемой снижения fps(частота...


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

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

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