2013-02-15 4 views
0

Je pensais que ce serait plus simple que prévu. Je suis en train de faire cette image sur imbriquée pour les boucles:C++ Boucles imbriquées

enter image description here

Toutes les suggestions ou solutions seraient utiles.

#include <iostream> 

using namespace std; 

int main() 
{ 
    for(int i=0; i<1;i++) 
    { 
     cout<<i+1<<endl; 

     for(int j=0;j<2;j++) 
     { 
      cout<<j+1; 
     } 
    } 

    cout<<"\n"; 
    for(int k=0; k<3; k++) 
    { 
     cout<<k+1; 
    } 
    cout<<"\n"; 
    for(int l=0; l<4; l++) 
    { 
     cout<<l+1; 
    } 
    cout<<"\n"; 
    for(int m=4; m>0; m--) 
    { 
     cout<<m; 
    } 
    cout<<"\n"; 
    for(int n=3; n>0; n--) 
    { 
     cout<<n; 
    } 
    cout<<"\n"; 
    for(int o=2; o>0; o--) 
    { 
     cout<<o; 
    } 
    cout<<"\n"; 
    for(int p=0; p<1; p++) 
    { 
     cout<<p+1; 
    } 
    cin.get(); 

    return 0; 
} 
+0

Une image de la la production de ce que vous avez créé serait très utile pour résoudre le problème. –

+3

N'utilisez pas non plus 'i',' j', 'k',' l', 'm',' n', 'o' comme noms de variables. c'est très difficile à comprendre le code –

+0

Indice: Vous voulez que la limite de la boucle interne soit l'indice de boucle de la boucle externe – happydave

Répondre

0
#include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
/*first half: From level1 = 1 to less than 5, level2 = 1 to less than or equal to level1, print level2 */ 
for(int level1 = 1; level1 < 5; level1++) { 
    for(int level2 = 1; level2 <= level1; level2++){ 
     cout << level2; 
    } 
    cout << '\n'; /*prints the newline AFTER each iteration of the `level2` loop*/ 
} 

/*second half: reverse the logic of part1, but also add spaces in the beginning */ 
for(int level1 = 4; level1 > 0; level1--){ 
    for(int interim = 4; interim > level1; interim--) cout << ' '; 
    for(int level2 = level1; level2 > 0; level2--){ 
     cout << level2; 
    } 
    cout << '\n'; 
} 
return 0; 
} 

Laissez-moi savoir si vous ne comprenez pas ce code :-)

+0

Je ne sais pas tout à fait, mais les résultats sont parfaits. Pourquoi nommer la variable interim et pourriez-vous expliquer la logique s'il vous plaît? – Klinetel

+1

bien que je ne savais pas comment appeler la variable là-bas, donc appelé quelque chose de stupide comme 'interim' mais vous comprenez du code qu'il est utilisé uniquement pour ajouter un espace dans la sortie. –

+0

Oui, merci beaucoup! – Klinetel

4

est ici une solution en C pour vous =)

#include <stdio.h> 
#include <string.h> 

int main(void) { 
    char forward[5] = "1"; 
    char reverse[5] = "4321"; 

    int i; 
    for(i = 1; i <= 4; i++) { 
     printf("%s\n", forward); 
     forward[i] = forward[i-1]+1; 
    } 
    for(i = 0; i < 4; i++) printf("% 4s\n", reverse+i); 
} 
3

Si vous voulez un très compact et solution peu suivie, j'ai décidé de tenter le coup.

int length = 4; 

for(int i = 0; i < 2; i++) 
{ 
    for(int j = 0; j < length; j++) 
    { 
     for(int k = 0; k < (i == 1 ? length - j : j + 1); k++) 
     { 
      if(i == 1 && k == 0) 
       for(int x = 0; x < j; x++) 
        cout << " "; 

      cout << (i == 1 ? (length - k) - j : k + 1); 
     } 

     cout << endl; 
    } 
} 

length est le nombre d'itérations de 1 à length.

Output

2

Ok, puisque paddy a affiché sa solution C (et quelqu'un a dit "compact" = P) ...

#include <stdio.h> 
int main() 
{ 
    char line[] = "1234321"; 
    int i=0; 
    for (; i<4; printf("%.*s\n",++i,line)); 
    for (i=0;i<4; printf("%4s\n",line+3+i++)); 
    return 0; 
} 

Sortie

1 
12 
123 
1234 
4321 
321 
    21 
    1