Вот реализация того что я понял - объединения в группы одинаковых шаров изначально забитых в рандомном порядке
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]