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

Последовательность - C++

Восстановить пароль Регистрация
 
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
13.12.2010, 21:20     Последовательность #1
Дано последовательность чисел 0 и 1
За какое минимальное количество перемещений её можно упорядочить так, чтобы сначала шли 0, а потом 1.
Перемещением считается вставка числа между двумя другими или с любого конца последовательности

Пример
6 ---------- элементов в последовательности
0
0
1
0
0
1
Ответ
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2010, 21:20     Последовательность
Посмотрите здесь:

Преобразовать литерную последовательность в другую литерную последовательность всеми описанными ниже способами C++
Вводится последовательность из N целых чисел. Сформировать последовательность, C++
C++ Вводить последовательность вещественных чисел, пока следующее вводимое число не окажется меньше предыдущего. Вывести полученую последовательность.
Последовательность С++ C++
Вводится последовательность целых чисел,0 –конец последовательности. Определить, содержит ли последовательность хотя бы три отрицательных четных числа C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
14.12.2010, 11:40     Последовательность #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
33
34
35
36
37
#include <stdio.h>
#include <string.h>
 
int main(int argc, char **argv)
{
    int N=6, l, r, mas[6]={0,0,1,0,0,1}, col=0, temp_l, temp_r;
    l=0; r=N-1;
    while(l<r-1)
    {
        while(mas[l]==0)
            l++;
        while(mas[r]==1)
            r--;
        if(l<r-1)
        {
            temp_l=l;
            temp_r=r;
            while(mas[temp_l]==1)
                temp_l++;
            while(mas[temp_r]==0)
                temp_r--;
            if(temp_l-l>r-temp_r)
            {
                col+=r-temp_r;
                r=temp_r;
            }
            else
            {
                col+=temp_l-l;
                l=temp_l;
            }
        }
    }
    printf("%d", col);
 
        return 0;
}
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,691
15.12.2010, 06:10     Последовательность #3
Цитата Сообщение от valeriikozlov Посмотреть сообщение
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
#include <stdio.h>
#include <string.h>
 
int main(int argc, char **argv)
{
    int N=6, l, r, mas[6]={0,0,1,0,0,1}, col=0, temp_l, temp_r;
    l=0; r=N-1;
    while(l<r-1)
    {
        while(mas[l]==0)
            l++;
        while(mas[r]==1)
            r--;
        if(l<r-1)
        {
            temp_l=l;
            temp_r=r;
            while(mas[temp_l]==1)
                temp_l++;
            while(mas[temp_r]==0)
                temp_r--;
            if(temp_l-l>r-temp_r)
            {
                col+=r-temp_r;
                r=temp_r;
            }
            else
            {
                col+=temp_l-l;
                l=temp_l;
            }
        }
    }
    printf("%d", col);
 
        return 0;
}
Программа такое выводит:

100010
1

Для продолжения нажмите любую клавишу . . .

и такое:

101111
0

Для продолжения нажмите любую клавишу . . .

Вроде бы это неправильно.

Добавлено через 1 час 15 минут
Вот так вроде бы правильно работает:

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
//////////////////////////////////////////////////////////////////////////////////////
//Дано последовательность чисел 0 и 1
//За какое минимальное количество перемещений её можно упорядочить так, 
//чтобы сначала шли 0, а потом 1.
//Перемещением считается вставка числа между двумя другими или с любого конца 
//последовательности
//
//Пример
//6 ---------- элементов в последовательности
//0
//0
//1
//0
//0
//1
//Ответ
//1 
//////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <string>
//////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    srand(static_cast<unsigned>(time(0)));   
 
    struct  T_rand_0_1_symb
    {
        char  operator() ()
        {
            return rand() % 2 + '0';
        }
    };
    int    k = rand() % 10 + 2;
    T_str  s(k, 0);
 
    std::generate(s.begin(), s.end(), T_rand_0_1_symb());
    T_str             ss(s);       
    T_str::size_type  pos_cur  = 0;
    int               n        = 0;
    
    while(    
             (pos_cur = s.find("10")) != T_str::npos
         )
    {
        ++n;
        s.replace(pos_cur, 2, "");
    }
    std::cout << ss
              << std::endl
              << n
              << std::endl;
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.12.2010, 06:10     Последовательность #4
Цитата Сообщение от Mr.X Посмотреть сообщение
101111
0
Для продолжения нажмите любую клавишу . . .
Вроде бы это неправильно.
Да действительно неправильно. Тогда вот так:
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
#include <stdio.h>
#include <string.h>
 
int main(int argc, char **argv)
{
        int N=6, l, r, mas[6]={0,0,1,0,0,1}, col=0, temp_l, temp_r;
        l=0; r=N-1;
        while(l<r-1)
        {
                while(mas[l]==0)
                        l++;
                while(mas[r]==1)
                        r--;
                if(l<r)
                {
                        temp_l=l;
                        temp_r=r;
                        while(mas[temp_l]==1)
                                temp_l++;
                        while(mas[temp_r]==0)
                                temp_r--;
                        if(temp_l-l>r-temp_r)
                        {
                                col+=r-temp_r;
                                r=temp_r;
                        }
                        else
                        {
                                col+=temp_l-l;
                                l=temp_l;
                        }
                }
        }
        printf("%d", col);
 
        return 0;
}
Yandex
Объявления
15.12.2010, 06:10     Последовательность
Ответ Создать тему
Опции темы

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