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

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

Войти
Регистрация
Восстановить пароль
 
roonet_
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 27
#1

Найти соседей в массиве C++ - C++

20.08.2012, 16:27. Просмотров 877. Ответов 13
Метки нет (Все метки)

Есть мини-игра :
1. Шарики расположены по определенным позициям.
2. Кликаешь берет шарик в руки а все остальные шарики отодвигаются в сторону где взял шарик(как в игре Zuma).
3. Потом ложишь обратно (типа меняешь им позиции) тогда отодвигаются по сторонам освободив место шарику.

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

В целочисленном массиве найти наибольший элемент среди элементов меньше своих соседей - C++
Здравствуйте! Помогите, пожалуйста, с задачей: в целочисленном массиве найти наибольший элемент среди элементов меньше своих соседей.

Найти в последовательности количество соседей разных знаков - C++
Задачка номер раз: Среди N введенных чисел найти кол-во соседей разных знаков и вторая задачка..: Дан одномерный массив.Не...

Найти число элементов массива, которые больше своих “соседей” - C++
Найти число элементов массива, которые больше своих “соседей”, т.е. предшествующего и последующего элементов.

Не могу найти ошибку в поиске знака соседей элемента массива - C++
ничего не выводит, работаю в Dev-c++. #include <iostream> #include <cmath> using namespace std; int main(){ int n; ...

Найти и удалить в списке элементы, равные сумме своих соседей. - C++
Пожалуйста помогите. Надо создать список произвольной длины. Найти и удалить элементы, равные сумме своих соседей.

Среди N введенных чисел найти количество соседей разных знаков - C++
Задача №1 "Среди N введенных чисел найти количество соседей разных знаков" ____________ Надеюсь на вашу помощь

13
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 908
20.08.2012, 16:57 #2
отслеживай положение относительно массива(набор позиций шарика-вставки). и все.
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
20.08.2012, 17:46 #3
std::vector, методы erase/insert
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
20.08.2012, 17:53 #4
std::list, у него эффективнее реализована вставка-выемка из произвольного места.

Не по теме:

И класть, а не ложить.

0
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
20.08.2012, 18:03 #5
Так-то да, но кто знает, как у автора реализована функция "взять шарик в руки". Может он индекс шарика передает. Тогда лучше вектор. Или переделать все под лист.
0
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 908
20.08.2012, 19:37 #6
та пусть сам реализует list или vector
так веселее и нам и ТС
0
roonet_
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 27
21.08.2012, 03:13  [ТС] #7
пример кода бы
0
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
21.08.2012, 03:27 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ball* get(std::vector<ball*>& data, int index)
{
    auto it = std::next(data.begin(), index);
    ball* temp = *it;
    data.erase(it);
    return temp;
}
 
void set(std::vector<ball*>& data, int index, ball* new_ball)
{
    auto it = std::next(data.begin(), index);
    data.insert(it, new_ball);
    return;
}
никакой проверки на корректность входных параметров нет. А надо бы.
Функция get вытаскивает шарик с номером index, а функция set ставит шарик new_ball на место с номером index.
0
roonet_
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 27
21.08.2012, 04:19  [ТС] #9
а что такое std::next? у меня визуал не понимает.
0
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
21.08.2012, 04:41 #10
тогда пишите просто
C++
1
auto it = data.begin()+index;
если auto тоже не понимает, то тогда так:
C++
1
std::vector<ball*>::iterator it = data.begin()+index;
0
roonet_
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 27
21.08.2012, 06:23  [ТС] #11
после удаления как отсортировать массив чтоб взяли первый элемент из массива тогда второй элемент берет значение первого и так далее?
0
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
21.08.2012, 08:46 #12
Не понял. А с последним элементом тогда что происходит? Его значение пропадает вовсе что ли? Т.е. было
13, 42, 7, 2, 99
берем первый элемент - 13
стало
13, 42, 7, 2
так что ли?
0
roonet_
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 27
21.08.2012, 09:55  [ТС] #13
вот допустим массив из 9 чисел
array[9] = {1,2,3,4,5,6,7,8,9};
берем arr[5];
тогда четвертый элемент присваивает значение пятого и так далее arr[4] = 5; arr[6] = 5; типа так
0
-=ЮрА=-
Заблокирован
Автор FAQ
21.08.2012, 10:25 #14
Вот реализация того что я понял - объединения в группы одинаковых шаров изначально забитых в рандомном порядке
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <ctime>
#include <vector>
#include <iostream>
//#include <algorithm>//если юзаем sort
using namespace std;
 
void randFill(vector<int> &vec, int n);
void showBall(vector<int>  vec);
void sortBall(vector<int>  &vec);
 
int main()
{
    srand(time(0));
    vector<int> vec;
    randFill(vec, 20);//Пусть 20 шаров 
    showBall(vec);
    sortBall(vec);
    //а можно было вместо sortBall
    //sort(vec.begin(),vec.end());
    showBall(vec);
    return 0;
}
 
void randFill(vector<int> &vec, int n)
{
    for(int i = 0; i < n; i++)
        vec.push_back(rand()%3);
}
 
void showBall(vector<int>  vec)
{
    //0 означает красный 
    //1 зелёный
    //2 голубой
    vector<int>::iterator i;
    for(i = vec.begin(); i < vec.end(); i++)
    {
        switch((*i))
        {
        case 0:
            cout<<"[r]";
            break;
        case 1:
            cout<<"[g]";
            break;
        case 2:
            cout<<"[b]";
            break;
        }
    }
    cout<<endl;
}
 
void sortBall(vector<int>  &vec)
{
    vector<int>::iterator i;
    vector<int>::iterator j;
    int buf;
    for(i = vec.begin(); i < vec.end(); i++)
    for(j = i + 1      ; j < vec.end(); j++)
    {
        if((*j) < (*i))
        {
            buf = (*j);
            vec.erase(j);
            vec.insert(j,(*i));
            vec.erase(i);
            vec.insert(i,buf);
            //а можно было всё просто
            //swap((*i),(*j));
        }
    }
}
http://liveworkspace.org/code/e3f697ab6ab2b153992b0c37a32307dc
[g][r][r][r][g][g][g][b][r][b][b][r][g][r][g][r][g][r][b][r]
[r][r][r][r][r][r][r][r][r][g][g][g][g][g][g][g][b][b][b][b]
0
Миниатюры
Найти соседей в массиве C++  
21.08.2012, 10:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2012, 10:25
Привет! Вот еще темы с ответами:

Среди N введённых целых чисел найти количество соседей разных знаков - C++
Среди N введённых целых чисел найти количество соседей разных знаков.

Среди N введённых целых чисел найти количество соседей разных знаков - C++
Среди N введённых целых чисел найти количество соседей разных знаков.

Среди N введённых целых чисел найти количество соседей разных знаков. - C++
Помогите пожалуйста!! Даже не знаю как оно выглядит, ни набросков, ничего нет. =((

Найти сумму элементов массива, которые больше своих "соседей" справа и слева - C++
В массиве из N элементов найти сумму тех элементов, которые больше своих &quot;соседей&quot; справа и слева.


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

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

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