Marathoner's Number

[Home]   [Puzzles & Projects]    [Delphi Techniques]   [Math topics]   [Library]   [Utilities]

 

 

Search

Search WWW

Search DelphiForFun.org

As of October, 2016, Embarcadero is offering a free release of Delphi (Delphi 10.1 Berlin Starter Edition ).     There are a few restrictions, but it is a welcome step toward making more programmers aware of the joys of Delphi.  They do say "Offer may be withdrawn at any time", so don't delay if you want to check it out.  Please use the feedback link to let me know if the link stops working.

 

Support DFF - Shop

 If you shop at Amazon anyway,  consider using this link. 

     

We receive a few cents from each purchase.  Thanks

 


Support DFF - Donate

 If you benefit from the website,  in terms of knowledge, entertainment value, or something otherwise useful, consider making a donation via PayPal  to help defray the costs.  (No PayPal account necessary to donate via credit card.)  Transaction is secure.

Mensa® Daily Puzzlers

For over 15 years Mensa Page-A-Day calendars have provided several puzzles a year for my programming pleasure.  Coding "solvers" is most fun, but many programs also allow user solving, convenient for "fill in the blanks" type.  Below are Amazon  links to the two most recent years.

Mensa® 365 Puzzlers  Calendar 2017

Mensa® 365 Puzzlers Calendar 2018

(Hint: If you can wait, current year calendars are usually on sale in January.)

Contact

Feedback:  Send an e-mail with your comments about this program (or anything else).

Search DelphiForFun.org only

 

 

 

 

Problem Description   

Runners at a marathon race are assigned consecutive numbers starting at 1.  One of the entrants with a mathematical bent noticed that the sum of the numbers less than his own was equal to the sum of the numbers greater. If there were more than 10 runners but less than 100, what number was he and how many runners  were there in the race? 

What if there were more than 100 runners but  less than 1000?

Source: Math and Logic Puzzles for PC Enthusiasts, Dover Books, J. J. Clessa.

Background & Techniques   

Another trial and error solution.  We'll just try all marathoner's numbers between  the lower and upper limits we get from the user.  For each, add up the number lower and add up the number bigger and when they're equal, we've got a solution.

Running/Exploring the Program     

bulletBrowse source extract
bulletDownload source 
bulletDownload  executable   

Suggestions for Further Explorations

Could he have noticed that the product of the numbers less than his was equal to the product of the numbers greater?  If you try this, you'll need to use Delphi int64 type (long integer) to hold the trial products.  Also only try 1 to 100 runners. Well, maybe only try 1 to 45 since the largest number in int64 is 263 which is around 1020  which is about the size of the product of numbers from 1 to 45.  Here's a trick worth remembering:  Since 23 is around 10, 23X which is (23)x is around 10X for any X.  In other words, take any power of 2 and divide the power by 3 to get an estimate of its size in base 10.  So now you know, 2150 is is about 50 digits long, in case anyone ever asks.  
The product of integers from 1 to 45 is called a factorial and written as 45!.  I looked on the internet and found a site that lists the first 999 factorials and found that 45! is about 1020.  The whole list is 1.5 megabytes in size so I won't link to it here.   Maybe we'll write a Delphi program one of these days to check the list.  
From a performance point of view, it seems redundant to recalculate the 2 sums from scratch each time.  When we test to see if the marathoner's number is n, we calculate the sum from 1  to n-1 and from n+1 to the upper limit.  To check n+1, we should be able to add n to the lower sum and subtract  n+1 from the upper sum to get the next 2 sums to compare.   See if you can modify the code to work this way.  
 
  [Feedback]   [Newsletters (subscribe/view)] [About me]
Copyright © 2000-2018, Gary Darby    All rights reserved.