Skip to content

Instantly share code, notes, and snippets.

@vegito2002
Created December 30, 2017 04:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vegito2002/13cf226c5fba28c2c3660c3343c559f4 to your computer and use it in GitHub Desktop.
Save vegito2002/13cf226c5fba28c2c3660c3343c559f4 to your computer and use it in GitHub Desktop.
Non-decreasing sequence generation
#include <stdio.h>
#include <stdlib.h>
static int N;
static int counter = 0;
static int do_io = 0;
static void helper (int idx, int pos, int* triplet);
int
main (int argc, char* argv[]) {
if (argc != 2 && argc != 3) {
printf ("USAGE: ./generate N [do_io flag (defaults to 0 as no_do_io)]\n");
exit (1);
}
sscanf (argv[1], "%d", &N);
if (argc == 3)
sscanf (argv[2], "%d", &do_io);
int triplet[N];
for (int i = 0; i < N; i++) {
triplet[i] = -1;
}
for (int i = 0; i < 10; i++)
helper (i, 0, triplet);
printf ("\n# count of results: %d\n", counter);
}
static void
helper (int idx, int pos, int* triplet) {
triplet[pos] = idx;
if (pos >= N - 1) {
if ((counter++) % 10 == 0 && counter != 1) {
if (do_io)
printf ("\n");
}
if (do_io) {
printf ("{");
for (int i = 0; i < N; i++) {
printf ("%d", triplet[i]);
if (i < N - 1)
printf (", ");
}
printf ("}, ");
}
} else {
for (int i = idx; i < 10; i++) {
helper (i, pos + 1, triplet);
}
}
triplet[pos] = -1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment