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

Заменить каждую серию, длина которой больше k, на один наименьший элемент массива - C++

Восстановить пароль Регистрация
 
Gulch
0 / 0 / 0
Регистрация: 26.03.2014
Сообщений: 3
15.06.2014, 22:53     Заменить каждую серию, длина которой больше k, на один наименьший элемент массива #1
3. Дан массив, состоящий из n элементов. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии – количество этих элементов (длина серии больше 1). Заменить каждую серию, длина которой больше k, на один наименьший элемент массива. Если таких серий нет, то массив оставить без изменений.
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <cstdio>
char name[] = "d:\\data\\serii.txt";
char fname2[] = "d:\\data\\serii_out.txt";
 
int readDataToArray(int * arr, int size, char * fn)
{
    FILE * file = fopen(fn, "rt");
    if (!file)
    {
        printf("Error: file not opened!");
        return 0;
    }
 
    int dataSize;
    fscanf(file, "%d", &dataSize);
 
    if (dataSize > size) dataSize = size;
 
    for (int i(0); i<dataSize; ++i)
    {
        fscanf(file, "%d", &arr[i]);
        if (feof(file) && i<dataSize-1)
        {
            printf("Error: file is incorrect!");
            return 0;
        }
    }
 
    fclose(file);
    return dataSize;
 
}
 
int processArray(int * src, int src_sz,
                 int * dest)
{
    int lenght(1), K(0), j(1),larr[100];
    int minItem = src[0];
    for(int i(0); i<src_sz; ++i)                //нахождение
        {                                              //минимального элемента.
            if (src[i] < minItem) minItem = src[i];
        }
     for(int i(0); i<src_sz; i++)
        {
         if(src[i]==src[i+1])
         {
             ++lenght;
         }
         else
         {
             larr[i]=lenght;
         }
         }
}
 
void printArray(int * arr, int sz)
{
    printf("[");
    for (int i(0); i<sz; ++i)
        printf("%6d ", arr[i]);
    printf("  ]\n");
 
    printf("Size: %d\n", sz);
}
 
void ArrayToFile(int * arr, int sz, char * fn )
{
    FILE * file;
    file = fopen(fn, "wt");
 
    if (!file)
    {
        printf("Error: file not opened!");
        return;
    }
 
    fprintf(file, "[");
    for (int i(0); i<sz; ++i)
        fprintf(file, "%6d ", arr[i]);
    fprintf(file, "  ]\n");
 
    fprintf(file, "Size: %d\n", sz);
 
    fclose(file);
 
}
 
int main()
{
    const int nmax=200;
 
    int array1[nmax];
 
    int dsize=readDataToArray(array1, nmax, fname);
 
    if(dsize==0)
        return -1;
 
    int array2[100];
 
    int arr2ActSz;
    arr2ActSz = processArray(array1, dsize, array2);
 
    if (!arr2ActSz)
        return -2;
 
    printArray(array1,dsize);
    printArray(array2, arr2ActSz);
 
 
    ArrayToFile(array2, arr2ActSz, fname2);
 
    return 0;
}
Добавлено через 9 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int processArray(int * src, int src_sz,
                 int * dest)
{
    int lenght(1), K(0), j(1),larr[100];
    int minItem = src[0];
    for(int i(0); i<src_sz; ++i)                //нахождение
        {                                              //минимального элемента.
            if (src[i] < minItem) minItem = src[i];
        }
     for(int i(0); i<src_sz; i++)
        {
         if(src[i]==src[i+1])
         {
             ++lenght;
         }
         else
         {
             larr[i]=lenght;
         }
         }
}
Вот эта часть недописанная. Алгоритм не могу точно определить.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2014, 22:53     Заменить каждую серию, длина которой больше k, на один наименьший элемент массива
Посмотрите здесь:

Преобразовать массив, уменьшив каждую его серию на один элемент. C++
Каждую серию элементов в массиве увеличить на 1 элемент C++
C++ Создать одномерный массив, найти наименьший элемент 3-го столбца, поменять местами наименьший элемент элементы
C++ Создать новый массив, найти наименьший элемент 3-го столбца, поменять местами наименьший элемент 3-го столбца и элемент a23
C++ Заменить каждую последовательность, содержащую более одного пробела, на один пробел
C++ В одномерном массиве серию равных элементом заменить на max элемент массива
C++ Когда элемент одного массива больше элемента другого массива, то тот элемент что больше расскладывается на меньшие элементы
Заменить каждую серию массива, длина которой равна L, на один элемент с нулевым значением C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AntonChik
1083 / 581 / 21
Регистрация: 11.11.2008
Сообщений: 1,544
16.06.2014, 05:57     Заменить каждую серию, длина которой больше k, на один наименьший элемент массива #2
думаю так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int j(0);
lenght = 1;
    for(int i(0); i<src_sz; i++)
        {
         if(src[i]==src[i+1])
         {
             ++lenght;
         }
         else
         {
            if(lenght>1){dest[j] = minItem; lenght = 1;}
            else dest[j]=src[i];
            j++;
         }
     }
Yandex
Объявления
16.06.2014, 05:57     Заменить каждую серию, длина которой больше k, на один наименьший элемент массива
Ответ Создать тему
Опции темы

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