0

以前にそのような質問をしたことがありますが、印刷順序が含まれていなかったので、誤解を招くようなものでした.それでコンセプト全体が変わることを学んだので、もう一度質問する方が適切だと思いました.

 #include <iostream>
    using namespace std;
    int main()
    {
        int a, b, c, i;
        cin >> a >> b >>  c;

        for ( i = 0;  i < a; i++)
            cout << "*" << endl;

        for ( i = 0; i < b; i++)
            cout << "*" << endl;

        for ( i = 0; i < c; i++)
            cout << "*" << endl;
    }

出力が次と同じであることを認識しています:

for ( i = 0; i < a + b + c; i++ ){
cout << "*" << endl;
}

したがって、2 3 1 の場合、次のようになります。

*

*

*

*

*

*

私が欲しいのは:

     *

*    * 

*    *    *   //Horizontal distance between 2 shapes don't matter.

また、各列の印刷は別の関数で行う必要があります。

最初のループ:

*

*

2 番目のループ:

    *

*   *

*   *

最後のループ:

    *

*   *

*   *   *

*編集: *カーソル操作をまったく使用せずにこれを行う別の解決策があったようです.私の先生は、最初に文字ポインタに文字を格納し、次にその文字ポインタメモリを行ごとに出力することを提案しました.これはうまくいきました. .

4

2 に答える 2

1

これがそれを行うcursesプログラムです

#include <iostream>
#include <curses.h>

using namespace std;

int main(int argc, char** argv)
{
  int a,b,c,i;
  cin >> a >> b >> c;

  initscr(); // initialise curses
  int rows, cols;
  getmaxyx(stdscr, rows, cols);  // get screen size


  for (i=0; i<a; i++) {
    mvprintw(rows - 1 - i, 0, "*"); // plot at bottom column 0
  }

  for (i=0; i<b; i++) {
    mvprintw(rows - 1 - i, 1, "*"); // plot at bottom column 1
  }

  for (i=0; i<c; i++) {
    mvprintw(rows - 1 - i, 2, "*"); // plot at bottom column 2
  }

  refresh();  // update screen
  getch(); // exit when key is pressed
  endwin(); // exit curses
  return 0;
}
于 2013-05-13T12:20:45.970 に答える
0

あなたが望むようにこれを行うことはできません。コンソールに垂直に出力できないため、一度に水平線を出力する必要があります。

したがって、最初に、合計で必要な行数 を調べる必要があります。totalLinesこれは、最大値ab、およびcです。次に、これらの各行を反復処理する必要があります。

行の反復内*で、正しい位置に正しい数の s を出力する必要があります。ポイントを描画する必要があるかどうかの条件aa >= totalLines - line(lineは現在の行で、最初の行は 0 から始まる) です。bandについても同様でcあるため、ifそれぞれが空白または*.

于 2013-05-11T11:39:11.470 に答える