Skip to content

Instantly share code, notes, and snippets.

@TheTomster
Created May 8, 2015 19:02
Show Gist options
  • Save TheTomster/9aa0c40f3c1b2f23f160 to your computer and use it in GitHub Desktop.
Save TheTomster/9aa0c40f3c1b2f23f160 to your computer and use it in GitHub Desktop.
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
int lg2(int a, int b)
{
char af[256];
char bf[256];
snprintf(af, 256, "%d%d", a, b);
snprintf(bf, 256, "%d%d", b, a);
if (atoi(af) > atoi(bf))
return atoi(af);
else
return atoi(bf);
}
int largest_arrangement(int *numbers, int sz)
{
assert(sz >= 0);
if (sz == 1) {
return numbers[0];
} else if (sz == 2) {
return lg2(numbers[0], numbers[1]);
}
int split = sz / 2;
int a = largest_arrangement(numbers, split);
int b = largest_arrangement(numbers + split, sz - split);
return lg2(a, b);
}
int main(int argc, char **argv)
{
int arraysz = argc - 1;
int numbers[arraysz];
for (int i = 0; i < arraysz; i++) {
numbers[i] = atoi(argv[i + 1]);
}
int n = largest_arrangement(numbers, arraysz);
printf("%d\n", n);
return EXIT_SUCCESS;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment