コード例 #1
0
void find_triplet(int in) {
  //int out[3];
  int try1, try2, try3, t1remainder, t2remainder, t3remainder;
  for (try1 = 1; try1 < find_next_triangular(in); try1++) {
    t1remainder = in - triangular(try1);
    //printf("t1remainder: %i", t1remainder);
    if (t1remainder == 0) {
      printf("%i = %i\n", in, triangular(try1));
      return;
    } else {
      for (try2 = 1; try2 < find_next_triangular(t1remainder); try2++) {
	t2remainder = t1remainder - triangular(try2);
	if (t2remainder == 0) {
	  printf("%i = %i + %i\n", in, triangular(try1), triangular(try2));
	  return;
	} else {
	  for (try3 = 1; try3 < find_next_triangular(t2remainder); try3++) {
	    t3remainder = t2remainder - triangular(try3);
	    if (t3remainder == 0) {
	      printf("%i =  %i + %i + %i \n", in, triangular(try1), triangular(try2), triangular(try3));
	      return;
	    }
	  }
	}
      }
    }
  }
}
コード例 #2
0
void find_triplet(int in, int out[]) {
  int max_index = find_next_triangular(in);
  for (int i = 0; i < max_index; i++) {
    for (int j = 0; j < max_index; j++) {
      for (int k = 0; k < max_index; k++) {
        if (triangular(i) + triangular(j) + triangular(k) == in) {
          out[0] = triangular(i);
          out[1] = triangular(j);
          out[2] = triangular(k);
          return;
        }
      }
    }
  }
}