Распечатать в X с *

Я хочу напечатать X с *, я сделал левую сторону X, но я не знаю, как напечатать другую сторону (флип / зеркало) . если вы запустите этот код, он напечатает только левую сторону (X), и теперь я хочу напечатать правую сторону (X)? так что я должен сделать, чтобы завершить (X), используя звезды (*)? Спасибо вам, ребята. мне было интересно, можно ли это сделать?(я новичок в программировании)

#include <iostream>

// Expected output pattern:
//
//    *     *
//     *   *
//      * *
//       *
//      * *
//     *   *
//    *     *

using namespace std;

int main() {
   cout << "Printing X with star(*)" << endl;
   cout << endl;
   int i;
   int p;
   for (i = 1; i <= 10; i++) {

      for (int j = 1; j <= 10; j++) {
         if (j > i) break;
         cout << " ";
         cout << "\t";
      }
      cout << "\t\t\t\t";
      for (p = 1; p <= 10; p++) {

         cout << "*";
      }
      cout << endl;

   }
   for (i = 10; i >= 1; i--) {
      for (int j = 1; j <= 10; j++) {
         if (j > i) break;
         cout << " ";
         cout << "\t";
      }
      cout << "\t\t\t\t";
      for (p = 1; p <= 10; p++) {
         cout << "*";

      }
      cout << endl;
   }
   return 0;
}

2 ответа

Решение

Хорошо, спасибо всем, кто помог мне, я нашел ответ, который хотел, спустя почти 6 часов, и вот ответ:

#include <iostream>

using namespace std;

int main() {
cout << "Printing X with stars" << endl;
cout << endl;
int i;
int p;
int k;
int s;
int count = 72;
for (i = 1; i <= 10; i++) {

    for (int j = 1; j <= 10; j++) {
        if (j > i) break;
        cout << " ";
        cout << "\t";
    }
    cout << "\t\t\t\t";
    for (p = 1; p <= 10; p++) {

        cout << "* ";
    }
    for (k=1; k<=count; k++){
        cout << " ";

    }

    count-=8;
    for (s=1; s<=10; s++){
        cout << "* ";
    }
    cout << endl;
}
count = 0;
    for (i = 10; i >= 1; i--) {
        for (int j = 1; j <= 10; j++) {
            if (j > i) break;
            cout << " ";
            cout << "\t";
        }
        cout << "\t\t\t\t";
        for (p = 1; p <= 10; p++) {
            cout << "* ";
        }
        for (k=1; k<=count; k++) {
            cout << " ";
        }
        count +=8;

        for (s=1; s<=10; s++){
            cout << "* ";
        }
        cout << endl;
        if (count == 80) break;
}
return 0;
}

Вы находитесь на правильном пути, чтобы сделать это с правой стороны, вы должны напечатать больше **** в каждой строке в дополнение к тому, что вы уже сделали. Это может помочь подумать о печати каждой строки X как печати некоторого ****, затем нескольких пробелов, а затем большего **** и уменьшения количества пробелов каждый раз, когда вы приближаетесь к точке пересечения. Имеет ли это смысл? Это может помочь вам продвинуться дальше (. = Пробел):

*......*
.*....*
..*..*
...**

и так далее

Это один из многих способов добраться туда:

int main()
{
    int size = 8;
    int spacesBefore;
    int spacesBetween = size;
    int numStars = 1;
    // Top half:
    int i, j;
    for ( i = 0; i < size/2; i++ ) {
        spacesBetween = size - ( 2 * ( i + 1 ) );
        spacesBefore = i;
        for ( j = 0; j < spacesBefore; j++ )    // before
            cout << " ";
        for ( j = 0; j < numStars; j++ )        // * left
            cout << "*";
        for ( j  = 0; j < spacesBetween; j++ )  // between
            cout << " ";
        for ( j = 0; j < numStars; j++ )        // * right
            cout << "*";
        cout << endl;
    }
    // bottom half, do the same kind of thing but changing the spacings
    // ...
}
Другие вопросы по тегам