0 / 0 / 0
Регистрация: 08.11.2022
Сообщений: 15
1

Нахождения наибольшего часто встречаемого числа и страницы

08.11.2022, 21:19. Показов 682. Ответов 12

Author24 — интернет-сервис помощи студентам
Блокнотик размером 4х6 см содержит 24 листа бумаги в клетку. Размер клетки 5х5 мм. Маленький мальчик заполнил этот блокнотик цифрами. Каждая цифра занимает одну клетку, свободных клеток мальчик не оставил. Известно, что чаще всего он писал свой возраст. Каков возраст мальчика и на какой странице соответствующая ему цифра встречается наибольшее число раз? Блокнотик запрограммировать трехмерным массивом.

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
#include <stdio.h>
#define Q 8
#define W 24
#define E 12
 
void main()
{
    int a[Q][W][E], i, j, k, t, y, u;
    srand(time(NULL));
    for (i = 0; i < Q; i++)
    {
        for (j = 0; j < W; j++)
        {
            for (k = 0; k < E; k++)
            {
                a[i][j][k] = rand() % 10;
            }
        }
    }
    for (i = 0; i < Q; i++)
    {
        for (j = 0; j < W; j++)
        {
            for (k = 0; k < E; k++)
                printf("%d ", a[i][j][k]);
        }
        printf("\n");
    }
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2022, 21:19
Ответы с готовыми решениями:

Подсчет самого часто встречаемого слова
Здравствуйте, уважаемые форумчане. Нужна помощь для определения самого часто встречаемого слова в...

Определить самого часто встречаемого артиста
Добрый день, есть следующий запрос: SELECT tracks.title, albums.title, artist.name,...

Поиск наиболее часто встречаемого слова на сайте
Добрый вечер ув. Форумчане! :) Требуется написать программу, которая выводит наиболее встречаемое...

Определение наиболее часто встречаемого символа в тексте
Делаю программу для написания частотности символа суть такова что программа должна определить...

Алгоритмы нахождения наибольшего числа
Доброго времени суток, форумчане! Мне тут по структурам и алгоритмам выдали интересное задание, и я...

12
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7788 / 4613 / 2828
Регистрация: 22.11.2013
Сообщений: 13,111
Записей в блоге: 1
08.11.2022, 22:18 2
Основная идея:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define P 24
#define H 12
#define W 8
int d[10], m, mt=0; mp=0;
memset(d,0,sizeof(d));
for (int p=P; p-->0;) for (int h=H; h-->0;) for (int w=W; w-->0;) ++d[a[p][h][w]];
m=d[0];
for (int i=10; i-->0;) if (m<d[i]) m=d[i];
for (int p=P; p-->0;) {
  int t=0;
  for (int h=H; h-->0;) for (int w=W; w-->0;) t+=m==a[p][h][w];
  if (mt<t) {mt=t; mp=p;} 
}
printf("age: %d at page: %d\n",m,mp);
1
0 / 0 / 0
Регистрация: 08.11.2022
Сообщений: 15
08.11.2022, 22:52  [ТС] 3
bormant, Благодарю за ответ. Могли бы вы, пожалуйста, расписать более простым и понятным кодом для новичка
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7788 / 4613 / 2828
Регистрация: 22.11.2013
Сообщений: 13,111
Записей в блоге: 1
08.11.2022, 23:31 4
Нет, ещё проще не могу, куда проще-то...
1
0 / 0 / 0
Регистрация: 08.11.2022
Сообщений: 15
08.11.2022, 23:39  [ТС] 5
Пытался понять ваш код, но он не работает должным образом и не понятно что к чему, поэтому хотелось бы разобраться. Помогите, пожалуйста, что не так. Ниже приведен код. В результате программы получаю возраст мальчика 45-60, примерно, страница всегда 0.
Цитата Сообщение от bormant Посмотреть сообщение
Нет, ещё проще не могу, куда проще-то...
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
#include <stdio.h>
#define P 24
#define H 12
#define W 8
 
void main()
{
    int a[P][H][W], d[10], m, mt=0, mp=0, i, j, k, t, p, h, w;
    srand(time(NULL));
    memset(d,0,sizeof(d));
    for (p = 0; p < P; p++)
    {
        for (h = 0; h < H; h++)
        {
            for (w = 0; w < W; w++)
            {
                a[p][h][w] = rand() % 10;
            }
        }
    }
    for (p=P;p-->0;)
    {
        for (h=H; h-->0;)
        {
            for (w=W; w-->0;)
            {
                ++d[a[p][h][w]];
            }
        }
    }
 
    m=d[0];
    for (int i=10; i-->0;) if (m<d[i]) m=d[i];
    for (int p=P; p-->0;) {
      int t=0;
      for (h=H; h-->0;) for (w=W; w-->0;) t+=m==a[p][h][w];
      if (mt<t) {mt=t; mp=p;}
    }
    printf("\n");
    printf("age: %d at page: %d\n",m,mp);
    printf("\n");
    return 0;
}
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7788 / 4613 / 2828
Регистрация: 22.11.2013
Сообщений: 13,111
Записей в блоге: 1
09.11.2022, 00:06 6
Есть такой недочёт.
C
1
2
    m=0;
    for (int i=10; i-->0;) if (d[m]<d[i]) m=i;
Добавлено через 1 минуту
Нам нужен сам возраст (цифра) по максимальной частоте в d.

Добавлено через 4 минуты
Несколько раз звать printf() ради конца строки необязательно
C
1
    printf("\nage: %d at page: %d\n\n",m,mp);
Добавлено через 12 минут
Здесь мы собираем в d общую частоту каждой цифры, ищем самую частую. Потом по этой цифре собираем постраничные частоты, находя максимальную и её страницу.
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7788 / 4613 / 2828
Регистрация: 22.11.2013
Сообщений: 13,111
Записей в блоге: 1
09.11.2022, 00:07 7
Возможен подход экономнее по коду, но затратнее (не сильно) по памяти: собираем частоты постранично и общие, потом ищем максимум по этой свертке.
При таком подходе сам блокнот можно не хранить
0
0 / 0 / 0
Регистрация: 08.11.2022
Сообщений: 15
09.11.2022, 00:18  [ТС] 8
Теперь более менее понятно, благодарю за помощь
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7788 / 4613 / 2828
Регистрация: 22.11.2013
Сообщений: 13,111
Записей в блоге: 1
09.11.2022, 10:53 9
Лучший ответ Сообщение было отмечено justupman как решение

Решение

Цитата Сообщение от bormant Посмотреть сообщение
При таком подходе сам блокнот можно не хранить
Дабы не быть голословным:
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
#define P 24
#define H 8
#define W 12
 
int main()
{
    int a, d[P+1][10], p, h, w;
    srand(time(NULL));
    memset(d, 0, sizeof(d));
    for (p = 0; p < P; p++) {
        printf("\np. %d:\n",p+1);
        for (h = 0; h < H; h++) {
            for (w = 0; w < W; w++) {
                a = rand() % 10; ++d[p][a]; ++d[P][a];
                printf("%d", a);
            }
            printf("\n");
        }
    }
 
    int m = 0; for (int i = 10; i-->0;) if (d[P][m] < d[P][i]) m = i;
    int t = 0; for (int p = P;  p-->0;) if (d[t][m] < d[p][m]) t = p;
    printf("\nage: %d at page: %d\n", m, t+1);
    return 0;
}
0
0 / 0 / 0
Регистрация: 08.11.2022
Сообщений: 15
09.11.2022, 21:57  [ТС] 10
А можно ли как-то сделать, так чтобы числа вводились с клавиатуры, и уменьшить при этом размер массива?
Цитата Сообщение от bormant Посмотреть сообщение
Возможен подход экономнее по коду, но затратнее (не сильно) по памяти: собираем частоты постранично и общие, потом ищем максимум по этой свертке.
При таком подходе сам блокнот можно не хранить
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7788 / 4613 / 2828
Регистрация: 22.11.2013
Сообщений: 13,111
Записей в блоге: 1
09.11.2022, 22:44 11
Возможны оба варианта, поменяется только строка с rand(), вместо присваивания будет ввод.
0
0 / 0 / 0
Регистрация: 08.11.2022
Сообщений: 15
09.11.2022, 22:53  [ТС] 12
Когда пытался изменить размер, например, на #define P 8 #define H 6 #define W 4, а также заменить rand() на scanf("%d", &a[p][h][w]);, выводит возраст 0 и страницу 0. Хотя вводил цифры в диапазоне 0-9.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7788 / 4613 / 2828
Регистрация: 22.11.2013
Сообщений: 13,111
Записей в блоге: 1
09.11.2022, 23:34 13
На примере второго варианта:
C
6
7
8
#define P 3
#define H 2
#define W 2
C
19
                scanf(" %d", &a); ++d[p][a]; ++d[P][a];
Код
p. 1:
1 1 1 1
11
11

p. 2:
1 2 2 2
12
22

p. 3:
1 3 3 3
13
33

age: 1 at page: 1
0
09.11.2022, 23:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2022, 23:34
Помогаю со студенческими работами здесь

Макрос для нахождения наибольшего числа
Не могу разобраться с макросами, но страсть как хочется, помогите написать макрос. #define MAX(x,...

Процедура нахождения наибольшего и наименьшего числа
Привет всем ) столкнулся с очердной проблемой а точнее с процедурой и функцией . Кому не сложо...

Написать функцию для нахождения наибольшего числа
В текстовом файле записана непустая последовательность действительных чисел, разделенных пробелами...

Написать метод для нахождения наибольшего числа в массиве
Написать метод для нахождения наибольшего числа в массиве для двух, трех, четырех целых чисел

Составить алгоритм нахождения полусуммы наименьшего и наибольшего числа
Необходимо составить алгоритм нахождения полусуммы наименьшего и наибольшего числа из a b c d чисел...

функции:Написать программу, содержащую функцию нахождения наибольшего числа из N введенных
функции:Написать программу, содержащую функцию нахождения наибольшего числа из N введенных


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru