1
0
www.mikescher.com/www/statics/euler/euler_024_explanation.md
2017-11-08 17:39:51 +01:00

11 lines
986 B
Markdown

This is a really nice problem - and I kinda like the solution.
If we think about the ordered numbers we can see that the first few start with `0`, the next with `1` and so on ...
We can also see that there are `8!` possible numbers that start with `0` (or any other digit).
So if `1 * 8! <= (1000000 - 0)` the result starts with `0`. Otherwise if `2 * 8! <= (1000000 - 0)`, etc.
Then after we got our first digit (`2`) we can similar calculate the second with `1 * 7! <= (1000000 - 2 * 8!)`, `2 * 7! <= (1000000 - 2 * 8!)` ...
The last thing we have to be aware of is that this method yields us to the "n-th digit of the remaining digits". So if we got the 6th digit for our second calculation its in fact `7`, because we already used `2`.
The program now does exactly these calculations, you can see in the top row the already used digits (they are crossed out).
All in all this program pretty fast - they could really do another version of this problem with bigger numbers.