С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 23.02.2020
Сообщений: 2
1

Функция «Подсчёт остатков»

27.02.2020, 21:53. Показов 3331. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В этой задаче от вас потребуется написать функцию void count_mods(int* A, int size, int* mods, int m), которая будет проходить по массиву A размера size и будет заполнять массив mods размера m. В ячейке mods[i] должно находиться количество чисел массива A, которые имеют остаток i при делении на m.

С помощью этой функции считайте с клавиатуры массив A, а затем число m, и выведите количество остатков каждого вида при делении на m в формате, указанном в примере.

Формат входных данных
На первой строке дано одно целое число N (1 ≤ N ≤ 100) — количество элементов в массиве. В следующей строке заданы целые числа, не превосходящие 230 по абсолютной величине, — элементы массива A. В последней строке находится целое число m (2 ≤ m ≤ 50).
Формат выходных данных
В выходные данные требуется для кажлого вида остатков вывести строку «Remainder x: y», где x — остаток, а y — количество чисел из последовательности, которые имеют остаток x. Строки должны выводиться в порядке увеличения x.

5
4 6 9 2 1
3

вывод:
Remainder 0: 2
Remainder 1: 2
Remainder 2: 1


Код:
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
#include <iomanip>
#include <cmath>
#include <string>
#include <iostream>
 
using namespace std;
 
void count_mods(int  *a, int n, int *mods, int m) {
    int kol=0, i, j;
    for (i=0; i<m; i++) {
        for (j=0; j<n; j++) {
            if (a[i] % m==i) kol++;
        };
    mods[i]=kol;
    kol=0;
    };
}
 
int main()
{
    const int SIZE=100;
    int i, m, a[SIZE], mods[SIZE], n;
    cin>>n;
    for(i=0; i<n; i++) {
        cin>>a[i];
    };
    cin>>m;
 
    count_mods(a, n, mods, m);
 
    for (i=0; i<m; i++){
        cout<<"Remainder "<<i<<": "<< mods[i]<<endl;
    };
}
Не могу понять, почему аргументы функции после начала её компиляции превращаются в какую-то несуразицу.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2020, 21:53
Ответы с готовыми решениями:

Подсчет остатков
Здравствуйте У меня есть регистр накопления и документ списания, надо сделать так, чтобы в отчете...

Подсчет остатков по товарам
Добрый вечер, столкнулся со следующей проблемой: в таблице &quot;Заказы&quot; содержатся строки типа &quot;приход&quot;...

Подсчет остатков на складе
Добрый день. Прошу помочь создать процедуру расчета остатков на складе. Искал на форуме темы...

Подсчёт остатков на складе
Добрый день! Мне нужна помощь! Передо мной стоит задача - создать БД, в которую заносятся данные о...

3
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.02.2020, 22:31 2
Лучший ответ Сообщение было отмечено Selftishz как решение

Решение

Selftishz, на это предложение из условия не обратили внимание ?
Цитата Сообщение от Selftishz Посмотреть сообщение
С помощью этой функции считайте с клавиатуры массив A, а затем число m, и выведите количество остатков каждого вида при делении на m в формате, указанном в примере.
без оптимизации как-то так
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
#include <iostream>
using namespace std;
 
void count_mods(int *A, int size, int *mods, int m) 
{
    for (int j = 0;  j < size; j++) 
    cin >> A[j];
    
    cin >> m;
    
    mods = new int[m];    
    
    for (int j = 0; j < size; j++) 
        for (int i = 0; i < m; i++)
        if (A[j]%m==i) mods[i]++;
    
    for (int i = 0; i < m; i++)
        cout << "Remainder " << i << ": " << mods[i] << "\n"; 
  
     delete[]mods;
}
 
int main()
{
    int size, *mods=NULL, m=0;   
    cin >> size;
    
    int *A = new int[size];    
 
    count_mods(A, size, mods, m);
 
    delete[]A;
system("pause");
return 0;
}
2
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
27.02.2020, 22:41 3
Лучший ответ Сообщение было отмечено Selftishz как решение

Решение

Или как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void count_mods(int* a, int n, int* mods, int m) {
    for (int i = 0; i < n; ++i) {
        ++mods[a[i] % m];
    };
}
 
int main()
{
    const int SIZE = 100;
    int m, a[SIZE], mods[SIZE]{}, n;
 
    std::cin >> n;
    for (int i(0); i < n; ++i) std::cin >> a[i];
    std::cin >> m;
 
    count_mods(a, n, mods, m);
 
    for (int i(0); i < m; ++i) {
        std::cout << "Remainder " << i << ": " << mods[i] << '\n';
    };
 
    return 0;
}
2
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.02.2020, 22:47 4
Selftishz, неправильно считает у Вас скорее всего потому что в строке 12 Вашего кода нужно так:
if (a[j]%m==i)

Добавлено через 5 минут
вот nalbe666 уже оптимизировал, только включите в функцию то что требуется по условию и массивы всё же лучше применить динамические
1
27.02.2020, 22:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2020, 22:47
Помогаю со студенческими работами здесь

Подсчет остатков на нескольких складах
Если склад один, то я обычно делаю так: -запрос Всего поступило: группировка по товару, сумма в...

Выяснить, правда ли, что сумма остатков от деления нечётных x на k будет больше чем сумма остатков от деления чётных x на k
Ввести N чисел: 1 2 , ,..., N x x x , (N ≥3) и число k . Выяснить, правда ли, что сумма остатков ...

Верно ли, что сумма остатков от деления нечётных x на k будет больше, чем сумма остатков от деления чётных x на k
Ввести N чисел :х1,х2,..хn (N&gt;=3) и число k.Выяснить, правда ли, что сумма остатков от деления...

Подсчет слов, функция getchar
#include &lt;stdio.h&gt; #define IN 1 #define OUT 0 main () { int c, nl, nw, nc, state; ...


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

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