为我尝试执行的代码设置逻辑错误
*
**
***
**
*
这就是模式,我的代码正在运行
*
**
***
**
**
**
打印星星似乎存在逻辑错误,我只是想知道应该使用哪种逻辑。 这是代码:-
#include<iostream>
using namespace std;
int main()
{
/*
*
**
***
**
*
*/
int i,rows;
cout<<"Enter number of rows :"<<endl;
cin>>rows;
for(i = 1; i <= ((rows/2)+1) ; i++)
{
for(int j = (rows - i); j >= 1; j--)
{
cout<<" ";
}
for(int k = 1; k <= i; k++)
{
cout<<"*";
}
cout<<endl;
}
for(i = ((rows/2)+1) ; i <= rows; i++)
{
for(int j = 1; j <= i; j++)
{
cout<<" ";
}
for(int k = (rows/2); k >= 1; k--)
{
cout<<"*";
}
cout<<endl;
}
return 0;
}
答案 0 :(得分:1)
您可以如下更改第二个循环:
for ( i = ( rows / 2 ); i >= 1; i-- ) {
for ( int j = ( rows - i ); j >= 1; j-- ) {
cout << " ";
}
for ( int k = 1; k <= i; k++ ) {
cout << "*";
}
cout << endl;
}
它重用了第一个循环中的逻辑,但只是将其更改为从rows/2
降到1
(包括)。
第一个循环头对于偶数值也运行太多次。例如,对于4
,它执行4 / 2 + 1
的{{1}}。您想要的在下面。
3
这有效地四舍五入。因此,对于for ( i = 1; i <= (int)( rows / 2. + .5 ); i++ )
,您现在拥有4
的{{1}},然后是4 / 2. + .5
转换为2.5
。使用int
,您将得到2
和5
的{{1}},然后是5 / 2. + .5
的{{1}}
答案 1 :(得分:0)
您不需要在第二个i
循环中初始化for
。在第一个循环完成后,让我们继续下一行的值。
您打印的*
的数量由k
循环控制。在第一行循环中,您将打印其中i
,而在第二行中,您将始终打印相同的数字-rows / 2
。您将需要打印逐渐减少的数量-rows + 1 - i
。或只使用for (int k = i; k <= rows; ++k)
。