Je dois faire un Floyd Triangle qui s'imprime dans cet ordre:

7 8 9 10
4 5 6 
2 3
1

Mais actuellement, mon code s'imprime comme ceci:

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;
}

Est-ce que quelqu'un peut m'aider?

1
xdropp 27 oct. 2020 à 01:21

2 réponses

Meilleure réponse

Vous voilà.

#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;
}

La sortie du programme pourrait ressembler à

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
1
Vlad from Moscow 26 oct. 2020 à 23:14

Les autres réponses sont excellentes, mais personne n'a publié de fonction récursive, alors j'ai pensé en ajouter une.

#include <stdio.h>

void recursive(int n, int i);
void straight(int n);

// one way of doing it with a recursive function
void recursive(int n, int i) {
    if(n <= 0) 
        return;
    
    if(i <= n) {
        printf( "%-3d", (((n * (n + 1) / 2) - n) + i) );
        recursive(n, i + 1);
    } else {
        printf("\n");
        recursive(n - 1, 1);
    }
    
}

// straightforward nested loop way
void straight(int n) {
    int i, j, row_sum;
    
    for(i = n; i > 0; --i) {
        // the sum: i + (i-1) + (i-2) + ... + 2 + 1 = (i * (i+1)) / 2
        row_sum = (i * (i + 1)) / 2;
        
        for(j = i; j > 0; --j) {
            printf("%-3d", row_sum - j + 1);
        }
        printf("\n");
    }
}

// entry point
int main(int argc, char **argv) {
  int n = 0;
  
  scanf("%d", &n);
  
  printf("Recursive Output for n=%d\n", n);
  recursive(n, 1);
  
  printf("\nStraight Output for n=%d\n", n);  
  straight(n);

  return 0;
}

Production:

Recursive Output for n=5
11 12 13 14 15 
7  8  9  10 
4  5  6  
2  3  
1  

Straight Output for n=5
11 12 13 14 15 
7  8  9  10 
4  5  6  
2  3  
1  
0
Jonny Henly 27 oct. 2020 à 00:51