(c++)如何横向输出程序,像这样



我想要这样的输出:

示例输入= 4

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

它与模式(行和列)重复相同

我已经写了程序,但是我不知道如何只显示最后一列,直到所有的列都显示出来

这是我写的程序:

#include <iostream>
using namespace std;
int main() {
int x;
int repeat = 0;
cin >> x;
do {
for (int b = 0; b <= x; b++)
{
for (int c = b; c <= x; c++)
{
cout << " ";
}
for (int c = 0; c < b; c++)
{
cout << "*";
}
cout << endl;
}
++repeat;
} while (repeat != x);
return 0;
}

我想这个练习有两个目标。它试图教你如何将一个任务分解成更小的任务,并要求你打印一些*和空格。我会帮助你与第一但至少离开奈你。

把一个大问题分成几个小问题的方法不止一种。我将做如下操作:您想打印由若干块组成的列和行。

columns -> 
*   rows
**    **   |
***   ***   ***   v
****  ****  ****  ****
^--^ one piece

main部分可以像这样:

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>

std::string get_piece(int row, int col,int width);    
int main() {
int x = 4;
for (int row=0; row < x; ++row){
for (int col = 0; col < x ; ++col){
std::cout << get_piece(row,col,x) << "   ";
}
std::cout << "n";
}
}

打印x行和x列。现在你只需要弄清楚各个部分。这是一个开始(它使用std::setwstd::setfill):

std::string get_piece(int row, int col,int width){
std::stringstream ss;
ss << std::setw(width) << std::setfill('x') << row << col;
//    ^^ this is actually flawed, but you wont notice unless row or col are >9
return ss.str();
}

输出如下:

xxx00   xxx01   xxx02   xxx03   
xxx10   xxx11   xxx12   xxx13   
xxx20   xxx21   xxx22   xxx23   
xxx30   xxx31   xxx32   xxx33
这是一个完全不同的模式(这次使用std::string构造函数接受一个字符和重复该字符的数字):
std::string get_piece(int row, int col,int width){
int num_stars = (row+col)/2;
return std::string(num_stars,' ') + std::string(width-num_stars,'*');
}

结果是:

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

现在你只需要弄清楚根据row,colwidth这些部件的外观。

一种方法是反向操作。创建这个:

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

和空格填充每一行,这样所有的行都是相同的长度。但是不是将每一行从0打印到n,而是从n打印到0。也就是说,你实际上并没有这样打印它们——你只是构建了一个字符串数组,然后按相反的顺序打印字符串。

另一个选择是在你当前的大多数代码之前,对于每一行,确定有多少组星星不应该存在,然后在前面填充空间。这将保留大部分现有的代码。

相关内容

  • 没有找到相关文章

最新更新