印刷明星钻石

时间:2015-06-25 13:06:05

标签: c++ algorithm loops while-loop

我正在打印星星钻石,但是我的代码正在编译和运行,但它只打印了一半的钻石......任何人都请帮忙。

下面我提到了我的代码。 我无法理解这个问题,为什么系统只执行上半部而不是钻石的另一半。

#include<iostream>
using namespace std;
int main()
{
    int n,i=0,j;
    cin>>n;

    while(i<=(n/2))
    {
    j=0;
    while(j<(n/2)-i){
        cout<<" ";
        j=j+1;

    }
    j=0;
    while(j<i+1){
        cout<<"*";
        j=j+1;
    }
    j=0;
    while(j<=i-1){
        cout<<"*";
        j=j+1;
    }
    cout<<"\n";
    i=i+1;
    }

while(i<=(n/2))

      {
        j=0;
        while(j<(n/2)-i)
        {
            cout<<" ";
            j=j+1;

        }
        j=0;
        while(j<i)
            {
            cout<<"*";
            j=j+1;
            }
        j=0;
        while(j<i-1){
            cout<<"*";
            j++;
        }
        cout<<"\n";
        i--;
      }

return 0;
}

3 个答案:

答案 0 :(得分:1)

#include<bits/stdc++.h>
using namespace std;


int main() {

int n;

 cin>>n;

    for(int i=0;i<=n/2;i++)
    {
        for(int j=0;j<n;j++)
        {
            if((i+j==n/2) ||(abs(i-j)==n/2))
                printf("*");
            else
                printf(" ");
        }
         printf("\n");
    }
 for(int i=n/2-1;i>=0;i--)
 {
     for(int j=0;j<n;j++)
     {
         if((i+j==n/2) || (abs(i-j)==n/2))
             printf("*");
         else
             printf(" ");
     }
     printf("\n");
 }


return 0;
}

如果n = 5

   *

 *   *

*     *

 *   *

   *

答案 1 :(得分:0)

您在while()循环中使用相同的迭代器(i)。在第二个循环中使用不同的迭代器,或重置它。

答案 2 :(得分:0)

当您第一次循环i时,您有i = n/2 + 1
在第二个循环中,您希望i减少。所以它必须是while (i > 0)而不是目前的。