我需要帮助来编写一个程序来打印出从用户那里获取行数的形状
I need help to writing a program that prints out shape that takes number of rows from user
形状应该是这样的:shape
比如这个图有10行。形状应该继续这种模式。
到目前为止,这是我的代码:
#include <iostream>
using namespace std;
int main()
{
int rows, a, b, c, d;
cout << "Enter the number of the rows: ";
cin >> rows;
for (a = 1; a <= rows; a++) {
for (b = 1; b <= a; b = a + 4) {
cout << " ******" << endl;
}
for (c = 2; c <= rows; c += 2) {
cout << " **********" << endl;
}
for (d = 3; d <= rows; d += 4) {
cout << "************" << endl;
}
}
return 0;
}
我无法按顺序恢复它。比如我输入值5,每行重复5次,但是我希望行数是5。
这是一个解决方案:
#include <iostream>
#include <iomanip>
int main( )
{
std::cout << "Enter the number of the rows: ";
std::size_t rowCount { };
std::cin >> rowCount;
constexpr std::size_t initialAsteriskCount { 6 };
std::size_t asteriskCount { initialAsteriskCount };
bool isIncreasing { };
int fieldWidth { initialAsteriskCount + 3 };
for ( std::size_t row = 0; row < rowCount; ++row )
{
std::cout << std::right << std::setw( fieldWidth ) << std::setfill(' ')
<< std::string( asteriskCount, '*' ) << '\n';
switch ( asteriskCount )
{
break; case 6:
isIncreasing = true;
asteriskCount += 4;
fieldWidth = 11;
break; case 10:
asteriskCount += ( isIncreasing ) ? 2 : -4;
fieldWidth = ( isIncreasing ) ? 12 : 9;
break; case 12:
isIncreasing = false;
asteriskCount -= 2;
fieldWidth = 11;
}
}
return 0;
}
这或许可以再简化一点。但它工作正常。
此外,请注意 switch
语句的语法乍一看可能有点奇怪。但这是编写 switch
块的新的更安全的方法,并得到专家的推荐。
形状应该是这样的:shape
比如这个图有10行。形状应该继续这种模式。
到目前为止,这是我的代码:
#include <iostream>
using namespace std;
int main()
{
int rows, a, b, c, d;
cout << "Enter the number of the rows: ";
cin >> rows;
for (a = 1; a <= rows; a++) {
for (b = 1; b <= a; b = a + 4) {
cout << " ******" << endl;
}
for (c = 2; c <= rows; c += 2) {
cout << " **********" << endl;
}
for (d = 3; d <= rows; d += 4) {
cout << "************" << endl;
}
}
return 0;
}
我无法按顺序恢复它。比如我输入值5,每行重复5次,但是我希望行数是5。
这是一个解决方案:
#include <iostream>
#include <iomanip>
int main( )
{
std::cout << "Enter the number of the rows: ";
std::size_t rowCount { };
std::cin >> rowCount;
constexpr std::size_t initialAsteriskCount { 6 };
std::size_t asteriskCount { initialAsteriskCount };
bool isIncreasing { };
int fieldWidth { initialAsteriskCount + 3 };
for ( std::size_t row = 0; row < rowCount; ++row )
{
std::cout << std::right << std::setw( fieldWidth ) << std::setfill(' ')
<< std::string( asteriskCount, '*' ) << '\n';
switch ( asteriskCount )
{
break; case 6:
isIncreasing = true;
asteriskCount += 4;
fieldWidth = 11;
break; case 10:
asteriskCount += ( isIncreasing ) ? 2 : -4;
fieldWidth = ( isIncreasing ) ? 12 : 9;
break; case 12:
isIncreasing = false;
asteriskCount -= 2;
fieldWidth = 11;
}
}
return 0;
}
这或许可以再简化一点。但它工作正常。
此外,请注意 switch
语句的语法乍一看可能有点奇怪。但这是编写 switch
块的新的更安全的方法,并得到专家的推荐。