Search code examples
cloopsfor-loopfigure

Floyd's Triangle Reverse


I have to make a Floyd Triangle that prints in this order:

7 8 9 10
4 5 6 
2 3
1

But currently my code print like this:

1
2 3 
4 5 6
7 8 9 10

CODE:

    #include <stdio.h>
int main()
{
  int n, i,  c, a = 1;

  scanf("%d", &n);

  for (i = 1; i <= n; i++)
  {
    for (c = 1; c <= i; c++)
    {
      printf("%d ", a); 
      a++;
    }
    printf("\n");
  }

  return 0;
}

Can someone help me?


Solution

  • Here you are.

    #include <stdio.h>
    
    int main(void) 
    {
        while ( 1 )
        {
            printf( "Enter a non-negative number (0 - exit): " );
            
            unsigned int n;
            
            if ( scanf( "%u", &n ) != 1 || n == 0 ) break;
            
            int width = 0;
            
            for ( unsigned int tmp = n * ( n + 1 ) / 2; tmp != 0; tmp /= 10 )
            {
                ++width;
            }
            
            putchar( '\n' );
            
            for ( unsigned int i = 0; i < n; i++ )
            {
                unsigned int value = ( n - i ) * ( n - i + 1 ) / 2 - ( n - i - 1 );
                
                for ( unsigned int j = 0; j < n - i; j++ )
                {
                    printf( "%*u ", -width, value++ );
                }
                
                putchar( '\n' );
            }
            
            putchar( '\n' );
        }
        
        return 0;
    }
    

    The program output might look like

    Enter a non-negative number (0 - exit): 10
    
    46 47 48 49 50 51 52 53 54 55 
    37 38 39 40 41 42 43 44 45 
    29 30 31 32 33 34 35 36 
    22 23 24 25 26 27 28 
    16 17 18 19 20 21 
    11 12 13 14 15 
    7  8  9  10 
    4  5  6  
    2  3  
    1  
    
    Enter a non-negative number (0 - exit): 4
    
    7  8  9  10 
    4  5  6  
    2  3  
    1  
    
    Enter a non-negative number (0 - exit): 0