c++ - 我使用的逻辑有什么问题?
问题描述
有一个逻辑错误,我试图做的代码,
*
**
***
**
*
所以这就是模式,我的代码运行的是这个
*
**
***
**
**
**
星星的打印似乎有逻辑错误,我只是想知道我应该使用什么逻辑。继承人的代码: -
#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;
}
解决方案
您可以按如下方式更改第二个循环:
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
down 到1
(inclusive)。
对于偶数值,第一个循环标头也运行了太多次。例如, with 4
,它执行4 / 2 + 1
which is 3
。你想要的在下面。
for ( i = 1; i <= (int)( rows / 2. + .5 ); i++ )
这有效地轮回。所以对于4
你现在有4 / 2. + .5
which is 2.5
,然后转换为int
is 2
。用5
, 你得到5 / 2. + .5
which is 2.5 + .5
which is 3.0
, 然后到 an int
is3
推荐阅读
- pl-i - 如何获取字符串的当前剩余长度?
- spring - 如何修复表单验证,当它不起作用时
- gtk - GTK:如何在顶部窗口边框上获取按钮释放事件
- c++ - (C++ 和 OpenGL)我正在尝试在批处理渲染器中旋转一组顶点(它将模拟一个正方形),但它不是 100% 工作:(
- gcc - 多架构构建系统
- javascript - 如何将js变量传递给jinja2
- c++ - 这个简单的代码应该可以工作,但我收到警告
- excel - 如何从excel中的单个单元格中计算逗号分隔的特定值
- java - 我尝试获取 WorkManager 的实例并获取 RuntimeException!有绕行吗?
- python - 我怎样才能得到硒中的文字?