С РЕШЕНИЕМ! На круглом столе вплотную друг к другу лежит 2022 монеты. Два игрока ходят по очереди, за ход разрешается забрать одну монету или две или шесть монет подряд, лежащих вплотную. Тот, кто не может забрать монету, проигрывает. Кто выигрывает при правильной игре - первый или второй?
===== PascalABC.NET =====
function СуммаЦифр(Число: integer): integer;
begin
Result := 0;
while Число > 0 do
begin
Result += Число mod 10;
Число := Число div 10
end
end;
procedure ЧислоДействий(Число: integer; var Действий: integer);
begin
Число := Abs(Число); // вдруг кто-то задал отрицательное?
Действий := 0;
while Число > 0 do
begin
Число -= СуммаЦифр(Число);
Inc(Действий)
end;
if Число <> 0 then // невозможно получить 0
Действий := -1
end;
begin
var Число := ReadInteger('Введите число:');
var СделаноДействий := 0;
ЧислоДействий(Число, СделаноДействий);
if СделаноДействий >= 0 then
Print('Сделано действий:', СделаноДействий)
else
Print('Невозможно получить ноль')
end.
Код, который необходимо добавить, выделен на прикрепленной картинке красным прямоугольником.
Замечание: везде в коде не указан тип у vector. Необходимо указать тип, например vector<int>. В прикрепленном коде все исправлено.
Весь листинг:
#include <iostream>
#include <vector>
using namespace std;
vector<int> merge(vector<int> &A, vector<int> &B) {
int i = 0;
int j = 0;
vector<int> C(A.size() + B.size());
for (int k = 0; k < C.size(); k++) {
// Если в массиве А все элементы закончились
if (i == A.size()) {
C[k] = B[j];
j++;
// Если в массиве B все элементы закончились
} else if (j == B.size()) {
C[k] = A[i];
i++;
} else if (A[i] <= B[j]) {
C[k] = A[i];
i++;
} else {
C[k] = B[j];
j++;
}
}
return C;
}
vector<int> merge_sort(vector<int> &V, int l, int r) {
// Проверяем, не равна ли длина 1
// Частный случай, при котором рекурсия завершается
if (r - l == 1) {
vector<int> res(1);
res[0] = V[l];
return res;
}
// Находим середину массива
int m = (l + r) / 2;
// Сортируем левую и правую половины независимо
vector<int> left = merge_sort(V, l, m);
vector<int> right = merge_sort(V, m, r);
cout << l + 1 << ' '
<< r << ' '
<< right.front() << ' '
<< left.back() << endl;
// Сливаем отсортированные половины
return merge(left, right);
}
int main(){
int n;
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++) {
cin >> v[i];
}
// Вызов сортировки
vector<int> v_sorted = merge_sort(v, 0, v.size());
// Вывод результата
for (int i = 0; i < v.size(); i++) {
cout << v_sorted[i] << ' ';
}
return 0;
}