Мой вариант на Си: #include
#include
#include
#define BUFFER_SIZE 512
#define SZ(size, ptr) \
((size + 1) * (sizeof *ptr))
static const char *__next_set_ptr;
static size_t next_set(const char *str, int **dest_set)
{
size_t size = 0;
int *ptr = *dest_set;
int tmp;
if (str) {
__next_set_ptr = str;
}
else if (!__next_set_ptr) {
free(ptr);
return 0;
}
else {
free(ptr);
ptr = NULL;
}
while (*__next_set_ptr != '0') {
if (isdigit(*__next_set_ptr)) {
ptr = realloc(ptr, (size + 1) * sizeof *ptr);
ptr[size++] = *__next_set_ptr - '0';
}
else {
return 0;
}
__next_set_ptr++;
}
__next_set_ptr++;
*dest_set = ptr;
return size;
}
int main(void)
{
size_t set_size, size = 0;
char buffer[BUFFER_SIZE];
float *average = NULL;
int *set = NULL;
int i;
fgets(buffer, BUFFER_SIZE, stdin);
set_size = next_set(buffer, &set);
do {
average = realloc(average, SZ(size, average));
average[size] = 0;
for (i = 0; i < set_size; i++) {
average[size] += set;
}
average[size++] /= set_size;
} while (set_size = next_set(NULL, &set));
for (i = 0; i < size; i++) {
printf("set %d: %f\n", i + 1, average);
}
free(average);
return 0;
}
// 12123012125012430673212054341012305430
// set 1: 1.800000
// set 2: 2.200000
// set 3: 2.500000
// set 4: 3.500000
// set 5: 3.400000
// set 6: 2.000000
// set 7: 4.000000 Надеюсь, что я правильно понял условие задачи.