Задача о квадратах - найти количество сертификатов, что получил гражданин - C#
Формулировка задачи:
Представьте себе, люди живут в квадратной стране. Все в этой стране представляет собой квадрат. Таким образом, квадратное правительство приняло закон о покупке земли. Согласно закону каждый гражданин имеет право на покупку земли. Земля продается в квадратах. Покупая квадрат земли со стороной
То есть за 344 квадрика гражданин купил два квадрата площадью
a
гражданин платитa*a
квадрика(валюта) и получает сертификат владельца. Один житель страны решил инвестировать все его N квадриков в землю. Он обычно может сделать это, покупая квадратные куски размером 1х1. В то же время гражданин просит уменьшить количество кусков, которые он покупает,чтобы уменьшить налоги.Он успешно купил землю. Итак, задача заключается в том, чтобы найти количество сертификатов что он получил. Входные данные: Единственная строка содержит положительное целое число, то есть количество квадриков, за которые гражданин купил землю. Выходные данные: Единственная строка, содержащая количество сертификатов, что он получил. Пример| Пример |
| Input / 344 / 4 |
| Output / 3 / 1 |
5
(100/4 = 25, 25 / 2 = 5), и один квадрат площадью6
(144 квадрика = 144/4=36, 36/2 = 6). Подскажите с чего начать.Решение задачи: «Задача о квадратах - найти количество сертификатов, что получил гражданин»
textual
Листинг программы
static void Main(string[] args)
{
Console.WriteLine("Input numbers of quadrics ");
var N = Convert.ToInt32(Console.ReadLine()) / 4;
var count = GetSquareCount(N);
Console.WriteLine(count);
Console.ReadLine();
}
private static int GetSquareCount(int N)
{
var n = (int)Math.Sqrt(N);
var min = N;
for (int i = 2; i <= n; i++)
{
var s = i * i;
var result = (int)(N / s);
var rest = N - result * s;
if (rest > 0)
result += GetSquareCount(rest);
if (result < min)
min = result;
}
return min;
}