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

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

Войти
Регистрация
Восстановить пароль
 
BOR1K
14 / 14 / 4
Регистрация: 19.09.2009
Сообщений: 289
#1

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

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

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

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

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

Целый день думаю, ничего на ум не приходит...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2009, 13:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Очень интересная головоломка.. (C++):

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

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

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

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

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

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

12
Андрейка
419 / 223 / 27
Регистрация: 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
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,970
Завершенные тесты: 1
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
Harlequin
41 / 41 / 4
Регистрация: 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
BOR1K
14 / 14 / 4
Регистрация: 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
Gorev
135 / 132 / 17
Регистрация: 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
Harlequin
41 / 41 / 4
Регистрация: 08.11.2009
Сообщений: 167
15.12.2009, 14:13 #7
а теперь все взяли и запустили свои программки, чтоб убедиться что у всех вышла полная лажа

я так понял что массив только один и вспомогательными пользоваться нельзя?
0
BOR1K
14 / 14 / 4
Регистрация: 19.09.2009
Сообщений: 289
15.12.2009, 14:15  [ТС] #8
да один, но можно его взять в 2 раза больше.
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 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
BOR1K
14 / 14 / 4
Регистрация: 19.09.2009
Сообщений: 289
15.12.2009, 14:24  [ТС] #10
Спасибо. Но все же не могу понять в чем подвох задачи, если ее решать через 1 массив, у меня были предположения правильного решения через 2 массива сразу))
0
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
15.12.2009, 14:26 #11
CyBOSSeR, аа да прогнал ) не так условие прочитал)
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,813
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
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
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
15.12.2009, 19:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2009, 19:20
Привет! Вот еще темы с ответами:

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

Головоломка - C++
//PC1.cpp== Считывает числа с текстового файла и записывает в массив. #include &lt;fstream&gt; #include &lt;iostream&gt; int SIZE = 50; using...

Головоломка - C++
Я ломаю мозг, не знаю что делать помогите. Пытался вспоминать программач, не помогло, кто ответ знает ? #include&lt;iostream&gt; #include...

Головоломка - C++
Скучно как-то на форуме, нету интересных задач. Вот решил для общего развития задать &quot;загадку&quot;: как на этапе компиляции, пользуясь...


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

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

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