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

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

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

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

15.06.2014, 22:53. Просмотров 492. Ответов 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;
         }
         }
}
Вот эта часть недописанная. Алгоритм не могу точно определить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2014, 22:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заменить каждую серию, длина которой больше k, на один наименьший элемент массива (C++):

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

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

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

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

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

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

1
AntonChik
1084 / 582 / 21
Регистрация: 11.11.2008
Сообщений: 1,544
16.06.2014, 05:57 #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++;
         }
     }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2014, 05:57
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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