首页 > 解决方案 > 我使用的逻辑有什么问题?

问题描述

有一个逻辑错误,我试图做的代码,

  *
 **
***
 **
  *

所以这就是模式,我的代码运行的是这个

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

星星的打印似乎有逻辑错误,我只是想知道我应该使用什么逻辑。继承人的代码: -

#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;
}

标签: c++design-patternsnested-loops

解决方案


您可以按如下方式更改第二个循环:

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/2down 到1(inclusive)。

对于偶数值,第一个循环标头也运行了太多次。例如, with 4,它执行4 / 2 + 1which is 3。你想要的在下面。

for ( i = 1; i <= (int)( rows / 2. + .5 ); i++ )

这有效地轮回。所以对于4你现在有4 / 2. + .5which is 2.5,然后转换为intis 2。用5, 你得到5 / 2. + .5which is 2.5 + .5which is 3.0, 然后到 an intis3


推荐阅读