fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /**
  5.  * Return an array of arrays.
  6.  * The sizes of the arrays are returned as *columnSizes array.
  7.  * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
  8.  */
  9. int** generate(int numRows, int** columnSizes) {
  10. int **p_tri = malloc(numRows * sizeof(*p_tri));//check omitted
  11. *columnSizes = malloc(numRows * sizeof(**columnSizes));
  12. for(int i = 0; i < numRows; ++i){
  13. (*columnSizes)[i] = i + 1;
  14. p_tri[i] = malloc((*columnSizes)[i] * sizeof(*p_tri[i]));
  15.  
  16. p_tri[i][0] = p_tri[i][(*columnSizes)[i] - 1] = 1;
  17. }
  18. for(int r = 2; r < numRows; ++r){
  19. for(int c = 1; c < (*columnSizes)[r] - 1; ++c){
  20. p_tri[r][c] = p_tri[r-1][c-1] + p_tri[r-1][c];
  21. }
  22. }
  23. return p_tri;
  24. }
  25.  
  26. int main(void){
  27. int numRows = 5;
  28. int *columnSizes = NULL;
  29. int **p_tri = generate(numRows, &columnSizes);
  30.  
  31. for(int r = 0; r < numRows; ++r){
  32. printf("%*s", numRows - r, "");
  33. for(int c = 0; c < columnSizes[r]; ++c){
  34. if(c)
  35. putchar(',');
  36. printf("%d", p_tri[r][c]);
  37. }
  38. puts("");
  39. free(p_tri[r]);
  40. }
  41. free(p_tri);
  42. free(columnSizes);
  43. }
Success #stdin #stdout 0s 10320KB
stdin
Standard input is empty
stdout
     1
    1,1
   1,2,1
  1,3,3,1
 1,4,6,4,1