LINUX.ORG.RU

История изменений

Исправление vbr, (текущая версия) :

Моя версия на C, 19 строк.

#include <stdio.h>

void f(char *s0, char *s1, int n, long long x, long long y, int z) {
  if (n >= 0) {
    s1[0] = '0' + n;
    f(s0, s1 + 1, n - 1, x, y * 10 + n, z);
    s1[0] = '+';
    s1[1] = '0' + n;
    f(s0, s1 + 2, n - 1, x + y * z, n, 1);
    s1[0] = '-';
    f(s0, s1 + 2, n - 1, x + y * z, n, -1);
  } else if (x + y * z == 200)  {
    s1[0] = 0;
    puts(s0);
  }
}

int main(void) {
  char s0[18] = "9";
  f(s0, s0 + 1, 8, 0, 9, 1);
}

Исходная версия vbr, :

Моя версия на C, 19 строк.

#include <stdio.h>

void f(char *s0, char *s1, int n, long long x, long long y, int z) {
  if (n >= 0) {
    s1[0] = '0' + n;
    f(s0, s1 + 1, n - 1, x, y * 10 + n, z);
    s1[0] = '+';
    s1[1] = '0' + n;
    f(s0, s1 + 2, n - 1, x + y * z, n, 1);
    s1[0] = '-';
    f(s0, s1 + 2, n - 1, x + y * z, n, -1);
  } else if (x + y * z == 200)  {
    *s1 = 0;
    puts(s0);
  }
}

int main(void) {
  char s0[18] = "9";
  f(s0, s0 + 1, 8, 0, 9, 1);
}