Project Euler Problem #24

in code


00:00:00.0716283

This one hurt my head, even after I was led onto Narayana Pandita’s algorithm. The algorithm depends on finding the largest integer that is smaller than another integer in the sequence/array; however, I’ve looked at several code solutions that just come in from the right and pick the first integer that is smaller than another. So here I am!

Time to start studying for my repeat XNA exam.

Edit: My solution to this was basically stolen elsewhere, and it took me a whole year to come back, sit down, and work through my own solution. The poor wording (I’ve since edited it) of the Wikipedia article didn’t help me.

using System;

public class TwentyFour {
    static void Main() {
        int[] a = {0,1,2,3,4,5,6,7,8,9};    
        int   b = 1;
        int   c = 1000000;

        while (b < c) { 
            a = Permute(a);
            b++;
        }

        Print(a);
    }

    static void Print(int[] z) {
        Console.WriteLine();
        for (int i = 0; i < z.Length; i++)
            Console.Write(z[i]);
        Console.WriteLine("\n");
    }

    static int[] Permute(int[] z) {
        int k = -1;
        int l =  0;

        for (int i = (z.Length - 2); i >= 0; i--)
            if (z[i] < z[i + 1]) {
                k = i;
                break;
            }

        for (int i = z.Length - 1; i > k; i--)
            if (z[i] > z[k]) {
                l = i;
                break;
            }

        int tmp = z[k];
        z[k] = z[l];
        z[l] = tmp;

        Array.Reverse(z, k + 1, z.Length - (k + 1));
        return z;
    }
}


Six Months in the Mountain Kingdom

in me


Your email address will not be published. Required fields are marked *