我一直试图获得这种沙漏模式,现在已经有一段时间了,我一直坚持如何继续,它要求用户在顶行输入#的数量并指出行数。如果#的数量小于3,则会输出错误消息。如果行数小于1,则无效或者小于2'#'。
无论如何,如果我为顶行输入7,为行数输入3,我会继续获得此模式。
7#位于顶部
下一行中的#5
下一行3#
下一行3#
下一行中的#5
下一行7#
我不需要其中一个有3#的行,但我似乎无法摆脱它。
无论如何,这是我的代码:
// Declare and initialize variables
int topRow(0);
int row(0);
int i(0);
int k(0);
int j(0);
// Repeatedly prompt for top row size until valid value is entered
cout << "Enter size of the top row: " ;
cin >> topRow;
while(topRow < 3)
{
cout << "Size of the top tow must be at least three." << endl;
cout << "Enter size of the top row again: ";
cin >> topRow;
}
// Repeatedly prompt for the number of rows until valid value is entered
cout << "Enter number of rows: ";
cin >> row;
while(row == 0 || topRow/row < 2.0 || row < 1.0 )
{
cout << "Invalid number of rows." << endl;
cout << "Enter number of top row again: ";
cin >> row;
}
// Print the hour glass
cout << endl;
for (i=1; i < topRow ; i++)
{
if (i <= row )
{ for (j=1; j <= i-1; j++)
{
cout << " ";
}
for (k=1; k <= topRow - (i*2 - 2) ; k++)
{
cout << "#";
}
cout << endl;
}
else
{
for (j = row ; j >= i - (row - 1); j--)
{
cout << " ";
}
for (k = row ; k >= topRow - (i*2 - 2); k--)
{
cout <<"#";
}
cout << endl;
}
}
// end program
return 0;
答案 0 :(得分:1)
您可以在沙漏的后半部分的第一次迭代中添加一个检查。如果
虽然很乱,但是想要这样:
static bool first = true;
if (first) {
first = false;
} else {
// ... second print code
}
7和3的输入现在是:
#######
#####
###
#####
#######
如果您希望其他输入格式正确,则会出现更大的问题 我建议你重做你的算法。