Win a copy of Machine Learning Systems: Designs that scale this week in the Scala forum
or Xamarin in Action: Creating native cross-platform mobile apps in the Android forum!
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
Sheriffs:
Saloon Keepers:
Bartenders:

# Take numeric input and give the very next number which is a perfect square.

Ranch Hand
Posts: 166
2
The problem I am trying to solve is this:

When the user provides a whole number, the program returns the next whole number which is a perfect square.

For example, if I provide 5, then the program will check if 6, or 7, or 8, or 9 are perfect squares. It will detect 9 as being a perfect square and tell you that 3 times 3 is 9.

My pseudo-code is as follows:

1. take input as variable "n" of type int.
2. create a for loop which starts at 1 and runs till i = n.
3. the body of the for loop will calculate n/i and compare it with i for equality.

e.g. If the user passes 9, then the first iteration will be as follows:

9/1 = 9 (false)

second iteration:

9/2 = 4.5 (false)

third iteration:

9/3 = 3 (true, because i equals n)

4. The program will stop and tell us that "i" times "i" equals "n"
In this case, 3 times 3 equals 9

I wrote the following code, but I know that I have to account for modulus and probably use a float or double. I'm also not sure if my i == n should be i < n, instead.
Needless to say, my program does not work and I'm missing a few things

Bartender
Posts: 4222
48

If you want a brute force algorithm:
• as long as i * i <= n increment i
• answer is i * i

• This works but would be very slow for large values of n.

A simpler algorithm that involves floating point:
• i = square root of n truncated to an integer
• increment i
• answer = i * i

•
Ranch Hand
Posts: 70
Also, you can see this approach, but it's not a ready decision:

Carey Brown
Bartender
Posts: 4222
48

Vasyl Lyashkevych wrote:Also, you can see this approach, but it's not a ready decision:

Have you actually run this code with n=9 or n=5?

Vasyl Lyashkevych
Ranch Hand
Posts: 70
I already posted executed code, but we need to help. So, I pointed to that approaches, but didn't tested

Carey Brown
Bartender
Posts: 4222
48

Vasyl Lyashkevych wrote:I already posted executed code, but we need to help. So, I pointed to that approaches, but didn't tested

Sorry, your code doesn't work. If n=9 then it goes into an infinite (mostly) loop. If n=5 then your code yields: 2 times 2 equals 6 (the answer is supposed to be 9). The very first time through i=1 then for all other iterations i will equal 2 and never anything more.

 Consider Paul's rocket mass heater.