Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
1

Таблица умножения - таблица размера n строк на m столбцов, на пересечении i-ой строки и j-ого столбца стоит число i*j

14.04.2019, 20:59. Показов 5192. Ответов 8
Метки нет (Все метки)

Таблицей умножения назовем таблицу размера n строк на m столбцов, в которой на пересечении i-ой строки и j-ого столбца стоит число i*j (строки и столбцы нумеруются с единицы).

В одной из математических школ было решено провести педагогический эксперимент. Для того, чтобы ученикам было проще запоминать таблицу умножения, некоторые числа в ней будут покрашены в красный, некоторые - в синий, а некоторые - в зеленый цвет (оставшиеся числа будут черными).

Процесс покраски чисел можно условно разбить на четыре этапа. На первом этапе все числа красятся в черный цвет. На втором - все четные числа красятся в красный цвет, на третьем – все числа, делящиеся на 3, красятся в зеленый цвет, на четвертом - все числа, делящиеся на 5, красятся в синий цвет.

Директор школы хочет знать, какое количество картриджей для принтеров необходимо закупить для печати таблиц. Поэтому ему необходима информация о том, сколько чисел какого цвета будет в одной раскрашенной таблице умножения n на m.

Напишите пожалуйста программу, решающую задачу подсчета соответствующих количеств.

С принципом работы постараюсь разобраться сам, но желательно написать её понятной для новичка

Добавлено через 16 секунд
Заранее спасибо)
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2019, 20:59
Ответы с готовыми решениями:

Таблица умножения до 10, на число 12
Нужно сделать таблицу умножения в Free Pascal, на число 12. С параметром послусловием, предусловием...

Таблица умножения на заданное число
Помогите с задачей пожалуйста. Составить программу таблицы умножения на заданное число, используя...

Таблица умножения на заданное число. Рекурсия
Добрый день!)) Прошу помощи уважаемые форумчане, код рекурсивно рисует таблицу умножения на...

Таблица 6 строк и 5 столбцов
Задание 19. Создайте новое приложение, в котором на форме расположены Таблица размером 6 строк и 5...

8
3418 / 2777 / 752
Регистрация: 25.03.2012
Сообщений: 10,092
Записей в блоге: 1
14.04.2019, 21:42 2
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
#include <iostream>
using namespace std;
const int n = 10, m = 10;
enum { BLACK, RED, BLUE, GREEN, TOTAL }
table[n][m];
int main()
{
 
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; j += 2)
            table[i][j] = RED;
    for (int i = 0; i < n; i+=2)
        for (int j = 0; j < m; ++j)
            table[i][j] = RED;
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; j += 3)
            table[i][j] = GREEN;
    for (int i = 0; i < n; i += 3)
        for (int j = 0; j < m; ++j)
            table[i][j] = GREEN;
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; j += 5)
            table[i][j] = BLUE;
    for (int i = 0; i < n; i += 5)
        for (int j = 0; j < m; ++j)
            table[i][j] = BLUE;
    int colors[TOTAL] = { 0 };
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; ++j)
            ++colors[table[i][j]];
    cout << "BLACK: " << colors[BLACK] << endl;
    cout << "RED: " << colors[RED] << endl;
    cout << "BLUE: " << colors[BLUE] << endl;
    cout << "GREEN: " << colors[GREEN] << endl;
    return 0;
}
1
6591 / 4484 / 2561
Регистрация: 18.12.2017
Сообщений: 13,983
14.04.2019, 23:57 3
как вариант:
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
#include <iostream>
using namespace std;
 
int main()
{
    int n, m, red=0, green=0, blue=0;
    cout <<"n="; cin >>n;
    cout <<"m="; cin >>m;
    
      int **a = new int*[n]; 
    for (int i = 0; i < n; i++)
       a[i] = new int[m];   
    
    for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      {
      a[i][j]=i*j;
      if (a[i][j]%2==0&&a[i][j]%3!=0&&a[i][j]%5!=0) red++;
      else if (a[i][j]%3==0&&a[i][j]%5!=0) green++;
      else if (a[i][j]%5==0) blue++;
      }  
      
    cout << "red=" << red << "\ngreen=" << green << "\nblue=" << blue 
    << "\nblack=" << n*m - red - green - blue << "\n"; 
 
    for (int i = 0; i < n; i++)
    delete [] a[i];
    delete [] a;
system("pause");
return 0;
}
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
15.04.2019, 10:39  [ТС] 4
Kuzia domovenok, Всё отлично, только вот задавать кол-во строк и столбцов пользователь должен задавать сам с клавиатуры. Как так можно сделать? Просто table вроде как работает только с константами
0
3418 / 2777 / 752
Регистрация: 25.03.2012
Сообщений: 10,092
Записей в блоге: 1
15.04.2019, 12:48 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
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
using namespace std;
int n = 10, m = 10;
enum color{ BLACK, RED, BLUE, GREEN, TOTAL }
*table;
int main()
{
    cout<<"?m,n:";
    cin>>m>>n;
    table=new color[m*n];
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; j ++)
            table[i*m+j] = BLACK;
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; j += 2)
            table[i*m+j] = RED;
 
    for (int i = 0; i < n; i+=2)
        for (int j = 0; j < m; ++j)
            table[i*m+j] = RED;
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; j += 3)
            table[i*m+j] = GREEN;
    for (int i = 0; i < n; i += 3)
        for (int j = 0; j < m; ++j)
            table[i*m+j] = GREEN;
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; j += 5)
            table[i*m+j] = BLUE;
    for (int i = 0; i < n; i += 5)
        for (int j = 0; j < m; ++j)
            table[i*m+j] = BLUE;
    int colors[TOTAL] = { 0 };
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; ++j)
            ++colors[table[i*m+j]];
    cout << "BLACK: " << colors[BLACK] << endl;
    cout << "RED: " << colors[RED] << endl;
    cout << "BLUE: " << colors[BLUE] << endl;
    cout << "GREEN: " << colors[GREEN] << endl;
    return 0;
}
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
15.04.2019, 17:19  [ТС] 6
Kuzia domovenok, почему-то если ввести например m=1, n=1, то выведет BLUE=1, хотя должно BLACK=1, ведь синий цвет - когда число кратно 5, а 1 не кратна.
0
3418 / 2777 / 752
Регистрация: 25.03.2012
Сообщений: 10,092
Записей в блоге: 1
15.04.2019, 18:11 7
Лучший ответ Сообщение было отмечено llatibro как решение

Решение

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
#include <iostream>
using namespace std;
int n = 10, m = 10;
enum color{ BLACK, RED, BLUE, GREEN, TOTAL }
*table;
int main()
{
    cout<<"?m,n:";
    cin>>m>>n;
    table=new color[m*n];
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; j ++)
            table[i*m+j] = BLACK;
    for (int i = 0; i < n; ++i)
        for (int j = 1; j < m; j += 2)
            table[i*m+j] = RED;
 
    for (int i = 1; i < n; i+=2)
        for (int j = 0; j < m; ++j)
            table[i*m+j] = RED;
    for (int i = 0; i < n; ++i)
        for (int j = 2; j < m; j += 3)
            table[i*m+j] = GREEN;
    for (int i = 2; i < n; i += 3)
        for (int j = 0; j < m; ++j)
            table[i*m+j] = GREEN;
    for (int i = 0; i < n; ++i)
        for (int j = 4; j < m; j += 5)
            table[i*m+j] = BLUE;
    for (int i = 4; i < n; i += 5)
        for (int j = 0; j < m; ++j)
            table[i*m+j] = BLUE;
    int colors[TOTAL] = { 0 };
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; ++j)
            ++colors[table[i*m+j]];
    cout << "BLACK: " << colors[BLACK] << endl;
    cout << "RED: " << colors[RED] << endl;
    cout << "BLUE: " << colors[BLUE] << endl;
    cout << "GREEN: " << colors[GREEN] << endl;
    return 0;
}
1
6591 / 4484 / 2561
Регистрация: 18.12.2017
Сообщений: 13,983
15.04.2019, 18:27 8
Цитата Сообщение от llatibro Посмотреть сообщение
почему-то если ввести например m=1, n=1, то выведет BLUE=1, хотя должно BLACK=1, ведь синий цвет - когда число кратно 5, а 1 не кратна.
массивы в С++ индексируются с нуля. при m=1, n=1 i*j=0 соответственно BLUE=1
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
15.04.2019, 20:52  [ТС] 9
Kuzia domovenok, да, теперь вроде всё ок, спасибо большое)

Добавлено через 26 минут
Kuzia domovenok, я извиняюсь, конечно, но а что изменилось с последнего раза?)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2019, 20:52

Напечатать номера строк и столбца прямоугольной матрицы, на пересечении которых стоит максимальный элемент
7.5.2. Помогите, пожалуйста, решить задачу в С++. Напечатать номера строк и столбца...

Напечатать номера строк и столбца прямоугольной матрицы, на пересечении которых стоит минимальный элемент.
7.7.2. Помогите, пожалуйста, решить задачу в С++. Напечатать номера строк и столбца...

Интерактивная таблица (динамическое добавление строк или столбцов)
Доброго времени суток. Подскажите, пожалуйста, возможно ли реализовать такую таблицу с помощью...

Поменять местами элементы той строки и столбца матрицы, на пересечении которых стоит максимальный элемент
ПОМОГИТЕ ПОЖАЛУЙСТА ВЫПОЛНИТЬ ЗАДАНИЕ ПО С++. Дана матрица размерности n*m. Поменять местами...

ПодТаблицы с данными(Таблица-Таблица-Таблица-Таблица) и наследованием
Имеется такая база с таблицами Район-МО-Цель-Зачача. Несколько вариантов связей передумал уже, но...

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


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

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

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