Сколько из прямоугольника можно вырезать квадратов - C (СИ)
Формулировка задачи:
Работа ведется на языке Си в среде Visual Studio 2013
Дан прямоугольник со сторонами a,b. Сколько из такого прямоугольника можно вырезать квадратов, если известно что с каждым разом квадрат увеличивается (т. е. одинаковых быть не может). Количество квадратов вывести на консоль
Решение задачи: «Сколько из прямоугольника можно вырезать квадратов»
textual
Листинг программы
#include <stdio.h>
int main()
{
int a, b, min1, max1, max2, min2, square, count;
puts("Input the length and width of the rectangle:");
do{
if(2 == scanf("%d%d", &a, &b)) break;
getchar();
puts("Error input!Try again.");
}while(1);
min1 = a >= b ? b : a;
max1 = min1 == a ? b : a;
square = min1;
while(max1 - square < square - 1)
--square;
count = square;
while(count > 1){
square = count;
max2 = max1;
min2 = min1;
while(square > 0 && min2 >= 0){
if(square == 1){
printf("Quantity squares is %d\n", count);
return 0;
}
if(max2 >= square){
max2 -= square;
--square;
}
else{
min2 -= square + 1;
if(min2 >= square){
max2 = max1;
max2 -= square;
--square;
}
}
}
--count;
}
return 0;
}
Объяснение кода листинга программы
- Программа запрашивает у пользователя ввод длины и ширины прямоугольника.
- Если пользователь вводит некорректные данные, программа выводит сообщение об ошибке и просит ввести данные заново.
- Переменная
min1получает минимальное значение из двух: длины прямоугольника или его ширины. - Переменная
max1получает максимальное значение из двух: длины прямоугольника или его ширины. - Переменная
squareинициализируется значением минимальной стороны прямоугольника. - В цикле while происходит вычисление наибольшей стороны квадрата, который можно вырезать из прямоугольника.
- Переменная
countинициализируется значением количества квадратов, которые можно вырезать из прямоугольника. - В цикле while происходит вычисление количества квадратов, которые можно вырезать из прямоугольника.
- Если количество квадратов больше 1, то происходит смещение всех сторон на единицу.
- Цикл while повторяется до тех пор, пока количество квадратов больше 1.
- Выводится сообщение о количестве вырезанных квадратов.
- Программа завершается.