Maison >développement back-end >C++ >Programme C++ pour imprimer un motif d'étoile X

Programme C++ pour imprimer un motif d'étoile X

PHPz
PHPzavant
2023-09-13 11:45:031284parcourir

Programme C++ pour imprimer un motif détoile X

Montrer différentes formes de motifs d'étoiles, telles que des pyramides, des carrés et des losanges, est un

Parties communes de la programmation de base et du développement logique. nous sommes confrontés à divers problèmes Lorsque nous examinons les instructions de boucle en programmation, des étoiles et des modèles numériques sont impliqués. Cet article montre comment imprimer un X ou une croix à l'aide d'un astérisque.

Nous verrons les deux mêmes méthodes. Le premier est un peu compliqué, mais le suivant La méthode est très efficace.

Motif étoile (utilisant deux ensembles d'espaces)

*       *
 *     *
  *   *
   * *
    *
   * *
  *   *
 *     *
*       *

Pour ce mode, le nombre de lignes est n = 5. C'est pour la moitié supérieure. Le total des modèles X est 2n – 1

Voyons comment procéder en utilisant le formulaire ci-dessous−

La traduction chinoise de est : La traduction chinoise de est : La traduction de est : La traduction de est : La traduction chinoise de est : La traduction chinoise de est : La traduction de est : La traduction chinoise de est : La traduction chinoise de est : La traduction de est : se traduit par :
numéro de ligneStar CountNombre d'étoiles Espace restantSpace Between Spacing Description
11 2 0 7 Quand i = n, imprimez une étoile, sinon imprimez 2. L'espace de gauche est (i – 1) et l'espace entre les espaces est 2(n – i) - 1
2 211 5
3 2 2 3
44 2 3 1
551144--
6 2 3 1 Les étoiles de gauche sont décroissantes, comme n - (i - n) - 1 = 2n - i - 1. Le nombre d'espaces suivra : 2* (i - n) - 1
7 2 2 3
8 211 5
99 2 0 7

Algorithme

  • Lire n en entrée
  • Pour la plage de i de 1 à 2n - i, exécutez
    • Si je
    • Pour j allant de 1 à i - 1, faites
      • Afficher l'espace vide
    • Fin
    • Afficher les étoiles
    • Si i et n sont différents, alors
      • Pour j allant de 1 à 2(n - i) - 1, faites
        • Afficher l'espace vide
      • Fin
      • Afficher les étoiles
    • Si ça se termine
  • Sinon
    • Pour j allant de 1 à 2n - i - 1, faites
      • Afficher l'espace vide
    • Fin
    • Afficher les étoiles
    • Pour j allant de 1 à 2(i - n) - 1, faites
      • Afficher l'espace vide
    • Fin
    • Afficher les étoiles
  • Si ça se termine
  • Déplacer le curseur vers la ligne suivante
  • Fin
  • Exemple

    #include <iostream>
    using namespace std;
    void solve( int n ){
       for ( int i = 1; i <= 2*n - 1; i++ ) {
          if ( i <= n ) {
             for ( int j = 1; j <= i - 1; j++ ) {
                cout << ". ";
             }
             cout << "*  ";
             if ( i != n ) {
                for ( int j = 1; j <= 2 * (n - i) - 1; j++ ) {
                   cout << "  ";
                }
                cout << "*  ";
             }
          } else {
             for ( int j = 1; j <= (2 * n) - i - 1; j++ ) {
                cout << ". ";
             }
             cout << "*  ";
             for ( int j = 1; j <= 2 * (i - n) - 1; j++ ) {
                cout << "  ";
             }
             cout << "*  ";
          }
          cout << "\n";
       }
    }
    int main(){
       int n = 8;
       cout << "X Star Pattern for " << n << " lines." << endl;
       solve( n );
    }
    

    Sortie

    X Star Pattern for 8 lines.
    *                            *  
    . *                        *  
    . . *                    *  
    . . . *                *  
    . . . . *            *  
    . . . . . *        *  
    . . . . . . *    *  
    . . . . . . . *  
    . . . . . . *    *  
    . . . . . *        *  
    . . . . *            *  
    . . . *                *  
    . . *                    *  
    . *                        *  
    *                            *
    

    sortie (n=10)

    X Star Pattern for 10 lines.
    *                                    *  
    . *                                *  
    . . *                            *  
    . . . *                        *  
    . . . . *                    *  
    . . . . . *                *  
    . . . . . . *            *  
    . . . . . . . *        *  
    . . . . . . . . *    *  
    . . . . . . . . . *  
    . . . . . . . . *    *  
    . . . . . . . *        *  
    . . . . . . *            *  
    . . . . . *                *  
    . . . . *                    *  
    . . . *                        *  
    . . *                            *  
    . *                                *  
    *                                    *  
    

    Utilisez la méthode de la grille

    Le même problème peut être résolu en considérant une grille, et à partir de cette grille, on peut calculer La formule où les étoiles sont imprimées et où les espaces sont imprimés.

    * *
    * *
    * *
    * *
    *
    * *
    * *
    * *
    * *

    从上面的网格中,很容易理解,星星只会在列中放置 数字与行号(对角线)相同,列号为 (2n + 1 – i)

    算法

    • 读取 n 作为输入
    • m = 2n - i
    • 对于从 1 到 m 的 i,执行
      • 对于 j 从 1 到 m 的范围,执行
        • 如果 j 与 i 相同或 j 与 (m + 1) - i 相同,则执行
          • 显示星星
        • 否则
          • 显示空间
        • 如果结束
      • 结束
      • 将光标移至下一行
    • 结束

    示例

    #include <iostream>
    using namespace std;
    void solve( int n ){
       int m = 2*n - 1;
       for ( int i = 1; i <= m; i++ ) {
          for ( int j = 1; j <= m; j++ ) {
             if (j == i || j == (m + 1 - i))
                cout << "* ";
             else
                cout << ". ";
          }
          cout << endl;
       }
    }
    int main(){
       int n = 6;
       cout << "X Star Pattern for " << n << " lines." << endl;
       solve( n );
    }
    

    输出

    X Star Pattern for 6 lines.
    * . . . . . . . . . * 
    . * . . . . . . . * . 
    . . * . . . . . * . . 
    . . . * . . . * . . . 
    . . . . * . * . . . . 
    . . . . . * . . . . . 
    . . . . * . * . . . . 
    . . . * . . . * . . . 
    . . * . . . . . * . . 
    . * . . . . . . . * . 
    * . . . . . . . . . * 
    

    输出(当n = 8时)

    X Star Pattern for 8 lines.
    * . . . . . . . . . . . . . * 
    . * . . . . . . . . . . . * . 
    . . * . . . . . . . . . * . . 
    . . . * . . . . . . . * . . . 
    . . . . * . . . . . * . . . . 
    . . . . . * . . . * . . . . . 
    . . . . . . * . * . . . . . . 
    . . . . . . . * . . . . . . . 
    . . . . . . * . * . . . . . . 
    . . . . . * . . . * . . . . . 
    . . . . * . . . . . * . . . . 
    . . . * . . . . . . . * . . . 
    . . * . . . . . . . . . * . . 
    . * . . . . . . . . . . . * . 
    * . . . . . . . . . . . . . * 
    

    结论

    星形模式使用简单,对于学习编程循环思想很有用。这 文章演示了如何使用 C++ 显示左和右半菱形图案 右对齐的半菱形。拍摄后,X 或十字图案将使用星号显示 考虑n行计数。为此,我们提供了两种方法。一聘 填充和空白空间,而另一个则利用网格计算。而不是添加 空格,我们添加了点。如果没有,他们偶尔会从输出中删除空格。

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer