Пожалуйста, объясните, что делает каждая строка кода. Я уже что-то написала возможно не правильно
Код написан к задаче:
Числовой ребус: В этом примере на умножение присутствуют все цифры от 0 до 9, причем каждая цифра встречается только однажды (цифры в промежуточных выкладках в расчет не идут). Решите этот пример. Чтобы вам было от чего отправляться, мы вписали во второй сомножитель одну цифру.
X X X
X 5
------------
X X X X X
#include
int main()
{
int A1, A2, B1, x1, x2, x3, j;
int M[10];
for (A1 = 100; A1 0)
{
j = x2 % 10;
M[j]++;
x2 = x2 / 10;
}
while (x3 > 0)
{
j = x3 % 10;
M[j]++;
x3 = x3 / 10;
}
j = 0;
for (int i = 0; i < 10; i++) if (M[i] == 1) j++; //считает количество различных цифр
if (j == 10) //использованы все цифры
{
printf("%d * %d = %d\n", A1, A2, B1); //вывод
}
}
}
return 0;
}
396 * 45 = 17820
[Program finished]
Методом перебора всех 3значных и всех 2значных при условии что второй множитель делится на 10 с остатком 5 заполняется массив цифр М (вычисляется позиция в массиве путем деления на 10 с остатком и путем деления нацело на 10 каждого разряда числа каждого нового множителя и результата) где номер позиции цифра, а содержимое позиции 1 или 0 присутствует или отсутствует и цикл до тех пор пока массив не заполнится всеми 1. Если заполнится то вывод множителей и результата.
"В этом примере на умножение присутствуют ВСЕ цифры от 0 до 9"
От 0 до 9 - 10 штук, звездочек 9 штук - что-то в условии некорректно ( именно из-за этого программа и не работает, поскольку if (j == 10) никогда не выполнится )
PS: Если воспользоваться областью видимости - можно
for (int i = 0; i < 10; i++) M[i] = 0;
заменить на
int M[10]={0};
#include //для cout
#include //для вектора
#include //для next_permutation
bool comp(std::vector& A) //проверка на правильность выражения
{
if (A[0] && A[3] && A[4] == false) return false; //число не может начинаться с нуля
int a = A[0] * 100 + A[1] * 10 + A[2]; //первый множитель
int b = A[3] * 10 + 5; //второй множитель
int c = A[4] * 10000 + A[5] * 1000 + A[6] * 100 + A[7] * 10 + A[8]; //произведение
return a * b == c; //сравнение результата
}
int main()
{
std::vector A = { 0,1,2,3,4,6,7,8,9 }; //начальный вектор заполнен по умолчанию 0-9 кроме 5
while (!comp(A)) std::next_permutation(A.begin(), A.end()); //пока выражение не сходится, подобрать след. комбинацию
std::cout
Чтобы это понять, нужно ознакомиться с документацией. А именно хотя бы с математическими операторами. %
Наверно я ошибаюсь в их названии, но смысл должен быть понятен.