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

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

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

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

15.06.2014, 22:53. Просмотров 443. Ответов 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, на один наименьший элемент массива
Посмотрите здесь:

Заменить каждую серию массива, длина которой равна L, на один элемент с нулевым значением - C++
нужно решение Дано целое число L (&gt;0) и целочисленный массив размера N. Заме- нить каждую серию массива, длина которой равна L, на...

Заменить каждую серию массива, длина которой равна L, на один элемент с нулевым значением - C++
Здравствуйте.Дано целое число L (&gt; 0) и целочисленный массив размера N. Заменить каждую серию массива, длина которой равна L, на один...

Преобразовать массив, уменьшив каждую его серию на один элемент. - C++
Дан целочисленный массив размера N, содержащий по крайней мере одну серию, длина которой больше 1. Преобразовать массив, уменьшив каждую...

В одномерном массиве серию равных элементом заменить на max элемент массива - C++
В одномерном массиве группу, содержащую наибольшее число равных элементов, заменить на максимальный элемент этого массива. Элементы массива...

Каждую серию элементов в массиве увеличить на 1 элемент - C++
Такая задача на С++. В каждую серию элементов добавить еще один такой же элемент. Помогите решить все что я смогу написать: #include...

Когда элемент одного массива больше элемента другого массива, то тот элемент что больше расскладывается на меньшие элементы - C++
ребят не могу подобрать алгоритм ,такой что когда елемент одного массива больше елемента другого массива,то тот елемент что больше...

Преобразовать массив, увеличив его первую серию наибольшей длины на один элемент - C++
Ребятки, кому не сложно выручите с задачкой) Дан целочисленный массив размера N. Преобразовать массив, увеличив его первую серию...

Умножить каждую строку исходной матрицы на наименьший по значению элемент соответствующей строки - C++
Получить новую матрицу путем умножения элементов каждой строки исходной матрицы на наименьший по значению элемент соответствующей строки.

Заменить в строке каждую последовательность из двух и более пробелов на один пробел - C++
Разработать алгоритм обработки строки символов,которая может содержать буквы английского алфавита,цифры,знаки препинания,пробелы,знаки...

Заменить каждую последовательность, содержащую более одного пробела, на один пробел - C++
В заданной строке заменить каждую последовательность, содержащую более одного пробела, на один пробел. Например: &quot;a bcd ef . ...

Заменить в массиве каждую группу из нечетного количества подряд идущих нулей на один нуль - C++
Здравствуйте. Изучаю c++ меньше месяца, помогите решить следующую задачу: &quot;Дан массив с большим количеством нулевых элементов. Размер...

Создать одномерный массив, найти наименьший элемент 3-го столбца, поменять местами наименьший элемент элементы - C++
Дана матрица А(5,3) 1 Создать новый одномерный массив,каждый элемент которого равен среднему арифметическому элементов соответствующей...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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, на один наименьший элемент массива
Ответ Создать тему
Опции темы

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