2015-12-20 1 views
1
for(int width=1; width<=5; width++) { 
    if(width <= 1) { 
     for(int width=1; width<=5; width++) { 
      cout<<" "<<width<<" "; 
     } 
    } else if(width<5) { 
     cout<< endl; 
     for(int width2=5; width2<=9; width2++) { 
      if(width2==5 || width2==9) 
       cout<<" "<<width2<<" "; 
      else 
       cout<< " "; 
     } 
    } else { 
     cout<< endl; 
     for(int width3=13; width3>=9; width3--) { 
      cout<<" "<<width3<<" "; 
     } 
    } 
} 

ce code que j'ai posté ci-dessus dessine cette formeforme rectangulaire de valeurs numériques

1 2 3 4 5 
5   9 
5   9 
5   9 
13 12 11 10 9 

mais je veux vraiment mon code pour l'imprimer comme ça, je l'ai essayé beaucoup changer les choses, mais en vain . donc, je suis impatient de vous les gars.

1 2 3 4 5 
16   6 
15   7 
14   8 
13 12 11 10 9 
+0

Pourquoi utilisez-vous 'width' que le compteur de boucle dans la boucle extérieure et imbriquée? – PaulMcKenzie

+0

en fait, j'ai fait la boîte d'étoiles d'abord avec l'entrée de l'utilisateur, puis j'ai changé en numérique. –

+0

Avant d'écrire un code, dessinez des largeurs de 3, 4, 5, 6 et cherchez un motif. Votre code ressemble à essayer de trouver une solution en écrivant du code au lieu de dessiner sur papier d'abord la formule (s) pour générer chaque ligne. Par exemple, la ligne en dessous de la première commence toujours au numéro 'width * 4 - 4' et le côté droit correspondant commence à' width + 1'. Il y a toujours des lignes moyennes 'width - 2' à dessiner. La dernière ligne commence toujours à 'width * 3 - 2'. Donc, il y a 3 boucles, séparées et séparées les unes des autres (aucune imbrication n'est nécessaire) - La ligne du haut, les lignes du milieu, la dernière ligne. – PaulMcKenzie

Répondre

1

Si vous imprimez quelque chose sur la console, le retour des lignes et des retours chariot sera très compliqué.

L'astuce est de séparer le problème en 3 étapes:

stage1: imprimer la ligne supérieure, assez simple

stage2: imprimer le plus grand nombre enroulant autour, puis imprimer un espace vide et terminer avec le numéro à la fin, assurez-vous d'incrémenter et de décrémenter les chiffres en conséquence.

stage3: imprime la dernière ligne.

Voici le code de l'algorithme je viens de décrire:

#include <iostream> 

using namespace std; 


int main() 
{ 
    const int width=6; 

    const int height=6; 

    int numberInFront=(height-1)*2 + (width-1)*2; 
    int numberAtTheEnd= width; 
    for(int i=1; i<width; ++i) cout<<i<<"\t"; //print top line 
    cout<<endl; 

    for(int i=0; i<height-1; ++i) 
    { 
     cout<<numberInFront<<"\t"; 
     for(int j=0; j<width-3; j++) cout<<"\t"; //print inner space 
     cout<<numberAtTheEnd<<endl; 
     numberInFront--; 
     numberAtTheEnd++; 
    } 


    //print last line: 
    int counter = numberInFront; 
    while(counter!=numberAtTheEnd-1) 
    { 
     cout<<counter<<"\t"; 
     counter--; 

    } 
    return 0; 
} 
1

Il permet d'éviter les numéros de magie dans votre code à l'aide #defines ou const des variables. Cela le rend plus lisible et plus extensible. Par exemple, si vous voulez faire un carré de 20x20, votre code nécessitera une réécriture complète! Commencez à partir de cette solution de travail pour implémenter ce principe dans votre codage.

#include <iostream> 

using namespace std; 

#define SIDE 4 

int main(){ 

    int perimeter = SIDE * 4; 

    for(int width=0; width<=SIDE; width++) 
    { 
     if(width < 1) { 
     for(int width=0; width <= SIDE; width++) { 
      cout<<" "<<width + 1<<" "; 
     } 
     cout<< endl; 
     } 
     else if(width < SIDE) 
     { 
     cout<<" "<<perimeter - width + 1 << "\t\t" << (SIDE + width) + 1; 
     cout<< endl; 
     } 
     else 
     { 
     for(int width3 = perimeter - SIDE; width3 >= perimeter - 2 * SIDE; width3--) { 
      cout<<" "<<width3 + 1<<" "; 
     } 
     cout<< endl; 
     } 
    } 
    return 0; 
} 
1

est ici solution

int width =6; 
    int total = (width-1)*4; 
    for(int row=1; row <=width; row++) 
    { 
    if(row == 1) 
    { 
     for(int pr=1; pr<=width; pr++) 
     { 
      cout<<" "<<pr<<" "; 
     } 
     cout<<"\n"; 
    } 
    else if(row == width) 
    { 
     for(int pr=1; pr<=width; pr++) 
     { 
      cout<<" "<<(total-row-pr+3)<<" "; 
     } 
    } 
    else 
    { 
     for(int pr=1; pr<=width; pr++) 
     { 

      if(pr ==1) 
       cout<<" "<<(total-row+2)<<" "; 
      else if(pr ==width) 
       cout<<" "<<(width+row-1)<<" "; 
      else 
       cout<<" "<<" "<<" "; 
     } 
     cout<<"\n"; 
    } 
    }