• Post Reply Bookmark Topic Watch Topic
  • New Topic
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:
  • Liutauras Vilda
  • Campbell Ritchie
  • Tim Cooke
  • Bear Bibeault
  • Devaka Cooray
Sheriffs:
  • Jeanne Boyarsky
  • Knute Snortum
  • Junilu Lacar
Saloon Keepers:
  • Tim Moores
  • Ganesh Patekar
  • Stephan van Hulst
  • Pete Letkeman
  • Carey Brown
Bartenders:
  • Tim Holloway
  • Ron McLeod
  • Vijitha Kumara

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

 
Ranch Hand
Posts: 174
2
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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




 
Saloon Keeper
Posts: 4777
52
Eclipse IDE Firefox Browser Java MySQL Database VI Editor Windows
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
What if you start with n=5? The answer should be 9 but your algorithm fails if n is not a perfect square.

If you want a brute force algorithm:
  • start with i = 1
  • 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
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator
    Also, you can see this approach, but it's not a ready decision:

     
    Carey Brown
    Saloon Keeper
    Posts: 4777
    52
    Eclipse IDE Firefox Browser Java MySQL Database VI Editor Windows
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator

    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
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator
    I already posted executed code, but we need to help. So, I pointed to that approaches, but didn't tested
     
    Carey Brown
    Saloon Keeper
    Posts: 4777
    52
    Eclipse IDE Firefox Browser Java MySQL Database VI Editor Windows
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator

    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.

     
    • Post Reply Bookmark Topic Watch Topic
    • New Topic
    Boost this thread!