(Оффтоп)
В одном квадратном государстве жили квадратные люди. И всё остальное в этом государстве было тоже квадратное. Так, Квадратная Дума приняла Квадратный Закон о земле. Согласно этому закону, любой житель государства имел право приобрести землю. Земля продавалась, естественно, квадратными участками. Длина стороны каждого участка выражалась целым положительным числом метров. Приобретая участок земли со стороной a метров, покупатель платил a2 квадриков (местная валюта) и получал одно квадратное свидетельство о праве собственности на этот участок.
Один житель этого государства решил вложить все свои N квадриков без остатка в покупку земли. Это безусловно можно было сделать, приобретя участки размером 1 × 1 метр. Но этот житель потребовал от агентства недвижимости минимизации количества покупаемых участков. «Так мне будет легче общаться с Квадратной Налоговой Инспекцией», — сказал он. Сделка состоялась.
Найдите, какое количество квадратных свидетельств он получил.
Исходные данные
В единственной строке стоит целое положительное число N ≤ 60 000 — число квадриков, которое было у жителя.
Результат
В единственной строке стоит число свидетельств, полученных в результате сделки.
Пример: 344 | 3
2 день пытаюсь понять, почему у меня выходят не правильные ответы. Для 344 правильный, для 1, 2, 4 правильно, для 3 и 5 нет.
(Оффтоп)
Код:
#include<stdio.h>
#include<iostream>
#include<cmath>
using namespace std;
int minim[128];
int otvet = 1;
int count(double a, int min)
{
for(double k = floor(sqrt(a)); k>0; k--)
{
if(a-k*k == 0)
return 1;
otvet +=1;
/*printf("%lf", k);*/
for(int i = 0; i<k; i++)
{
if(i*i == a-k*k)
{
return 1;
}
}
count(k,otvet+1); return 1;
}
}
int main()
{
double a;
scanf("%lf", &a);
if(a == 2)
printf("2");
else
{
count(a, otvet);
printf("%d", otvet);
}
}