void computer(int* match, int num) {
int i, j;
// Количество спичек на столе
int col = getMatches(match, num); // Получаем количество спичек на поле
// Количество кучек
int bunches = 0; // Инициализируем счетчик кучек
// Массив кучек
int* bunches_of_match = (int*)malloc(sizeof(int) * num); // Выделяем память для массива кучек
// Определение позиции и размера кучек
for (i = 0; i < num; ++i) {
if (match[i] == 1) {
// Подсчет спичек в кучке
int k = 1; // Инициализируем счетчик спичек в кучке
for (j = i + 1; j < num; ++j) {
if (match[j] == 0) {
bunches_of_match[i] = k; // Запись размера кучки в массив
break; // Прерываем цикл, так как кучка закончилась
} else {
k++; // Увеличение счетчика спичек в кучке
}
}
if (j == num) { // Если кучка доходит до конца массива
bunches_of_match[i] = k; // Запись размера кучки
}
bunches++; // Увеличение счетчика кучек
i += k - 1; // Переход к следующей кучке
} else {
bunches_of_match[i] = 0; // Инициализация нулей в массиве кучек
}
}
// Разбиение спичек на группы по 1-2 спички
for (i = 0; i < num; ++i) {
if (bunches_of_match[i] > 0) {
// Если кучка больше 3 спичек
if (bunches_of_match[i] > 3) {
match[i + 2] = 0; // Удаление 2 спичек из кучки
match[i + 3] = 0;
printf("\nКомпьютер взял спички %d и %d.\n", i + 3, i + 4); // Вывод хода
free(bunches_of_match);
return; // Выход из функции
}
// Если кучка больше 2 спичек
if (bunches_of_match[i] > 2) {
if (bunches > 1) { // Если кучек больше 1
match[i] = 0;
match[i + 1] = 0;
printf("\nКомпьютер взял спички %d и %d.\n", i + 1, i + 2);
} else { // Если кучка единственная
match[i] = 0;
printf("\nКомпьютер взял спичку %d.\n", i + 1);
}
free(bunches_of_match);
return; // Выход из функции
}
}
}
// Взять 2 спички из оставшихся
for (i = 0; i < num; ++i) {
// В кучке > 1 спичек
if (bunches_of_match[i] > 1) {
if (bunches == 2) { // Если осталось 2 кучки
match[i] = 0;
printf("\nКомпьютер взял спичку %d.\n", i + 1);
} else { // Если кучек больше 2
match[i] = 0;
match[i + 1] = 0;
printf("\nКомпьютер взял спички %d и %d.\n", i + 1, i + 2);
}
free(bunches_of_match);
return; // Выход из функции
}
}
// Взять спички из оставшихся
for (i = 0; i < num; ++i) {
// В кучке одна спичка
if (bunches_of_match[i] == 1) {
match[i] = 0;
printf("\nКомпьютер взял спичку %d.\n", i + 1);
free(bunches_of_match);
return; // Выход из функции
}
}
// Если ничего не взято (не должно быть)
free(bunches_of_match);
}
| Гарантия на работу | 1 год |
| Средний балл | 4.53 |
| Стоимость | Назначаете сами |
| Эксперт | Выбираете сами |
| Уникальность работы | от 70% |