fork(7) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <assert.h>
  4.  
  5. // supported N = 26
  6. char canvas[ 26 * 2 - 1 ][ 26 * 2 - 1 ];
  7.  
  8. void draw_triangle( int n, char c, int x, int y ) {
  9.  
  10. int line_length = n * 2 - 1;
  11.  
  12. // draw n lines
  13. for( ; 0 < n; --n ) {
  14. // draw a line with specific length
  15. for( int len = 0; len < line_length; ++len )
  16. {
  17. canvas[ y ][ x + len ] = c;
  18. }
  19. --y, ++x;
  20. line_length -= 2;
  21. }
  22. }
  23.  
  24. void draw_upside_down_triangle( int n, char c, int x, int y ) {
  25.  
  26. int line_length = n * 2 - 1;
  27.  
  28. // draw n lines
  29. for( ; 0 < n; --n ) {
  30. // draw a line with specific length
  31. for( int len = 0; len < line_length; ++len )
  32. {
  33. canvas[ y ][ x + len ] = c;
  34. }
  35. ++y, ++x;
  36. line_length -= 2;
  37. }
  38. }
  39.  
  40.  
  41. int main() {
  42.  
  43. int n;
  44. scanf( "%d", &n );
  45. assert( 0 < n && n <= 26 );
  46.  
  47. int used_width = n * 2 - 1;
  48. int used_height = n * 2 - 1;
  49.  
  50. // clear canvas content
  51. for( int row = 0; row < used_height; ++row ) {
  52. for( int col = 0; col < used_width; ++col ) {
  53. canvas[ row ][ col ] = ' ';
  54. }
  55. }
  56.  
  57. int start_x = 0,
  58. start_y = n - 1;
  59. char c = 'A';
  60. for( ; 0 < n; --n ) {
  61. draw_triangle( n, c, start_x, start_y );
  62. draw_upside_down_triangle( n, c, start_x, start_y );
  63. ++start_x;
  64. ++c;
  65. }
  66.  
  67. // print the canvas
  68. for( int row = 0; row < used_height; ++row ) {
  69. for( int col = 0; col < used_width; ++col ) {
  70. printf( "%c", canvas[ row ][ col ] );
  71. }
  72. printf("\n");
  73. }
  74.  
  75. return EXIT_SUCCESS;
  76. }
Runtime error #stdin #stdout 0.02s 1808KB
stdin
Standard input is empty
stdout
Standard output is empty