使用星号(*)绘制X字形状

3
我想编写一个使用星号(*)绘制X字形的程序。
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[]){
  int i, j;

  for(i = 1; i <= 9; i++){
    for(j = 1; j <= 12; j++){
      if(i == j){
        cout << "***";
      }else{
        cout << " ";
      }
    }
    cout<< endl;
  }

  return 0;
}

我对编程非常陌生。

我只做了 (\),我该如何让整个 X?

***------***
-***----***-
--***--***--
---******---
--***--***--
-***----***-
***------***  

这是我到目前为止所做的事情。
include "stdafx.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int i, d, a=1,b=12,c;
for(i = 1; i <= 6; i++)
{
for (d=1; d<i;d++)  {cout <<" ";}
cout<<"***";
for (c=a+1; c<b;c++) {cout <<" ";}
{cout<<"***";}
for(b=12-i;b<i;b++) 
{cout<<"***";}
cout<<endl;
a++;
}
return 0;
}       

我把 (\//) 的上面分成三个部分 [空格][][空格][]

我怎样才能制作出X形状?我只做出了(\)这个形状,而没有整个X形。 - TTT
8个回答

3

我已经在Java中编写了以下函数/方法。您可以将其转换为C++。

public static void printX(int x) {
    char[] chars = new char[x];
    for (int i = 0; i < x; i++) {
        chars[i] = '*';
        chars[x - 1 - i] = '*';
        for (int j = 0; j < x; j++) {
            if (j == i || j == (x - 1 - i)) {
                continue;
            }
            chars[j] = ' ';
        }
        System.out.println(new String(chars));
    }

}

如果您调用上述函数/方法并输入 printX(5);,则输出将为大小为 5x5 的包含 X 字符的矩阵。
*   *
 * * 
  *  
 * * 
*   *

经过长时间的努力,这是解决方案 #include "stdafx.h" #include <iostream>using namespace std;int main(int argc, char* argv[]) { int i, d, a=1,b=12,c ,e=1; for(i = 1; i <= 6; i++) { for (d=1; d<i;d++) {cout <<" ";} cout<<""; for (c=a+1; c<b;c++) {cout <<" ";} {cout<<"***";} for(b=12-i;b<i;b++) {cout<<"***";} cout<<endl; a++; } for( i = 1; i <= 3; i++) { for ( d=6; d>i;d--) {cout <<" ";} cout<<""; for (c=0; c<e-1;c++) {cout <<" ";} {cout<<"***";} cout<<endl; e++; } return 0; } - TTT

1
**** ****
 *** ***
  ** **
   * *
  ** **
 *** ***
**** ****

首先,抱歉我的X字非常不均匀。对于初学者,我会给出一个算法供您思考,而不是直接提供代码。

  • 解释器不知道如何返回已经打印过的行。因此,您需要在循环的一次迭代中绘制X的两侧。

  • 之后,您要减少星号数量(star--)并绘制第二条线。

  • 重复执行,直到星号数量降至中间点时为止,此时星号数量为0。

  • 当您的代码发现星号数量为0时,就开始使用相同的循环,但这次每次迭代都将星号数量增加(star++)。

  • 这个过程会一直重复,直到星号的起始计数(在我的例子中为4)。

如果有任何问题,您可以在网站上发布您的代码 :)


0
#include<iostream>
using namespace std;
int main()
{
    int i, j;
    for(i = 1;i<= 5;i++)
    {
        for(j = 1;j<= 5;j++)
        {
            if((i == j)||(j==(5+1)-i))
            {
                cout << "*";
            }
            else{   
                cout << " ";
            }
        }
        cout<< endl;
    }
    system("pause");
}

0
你应该动态评估每一行的间距区域。在纸上手动绘制所需的形状,并尝试创建一个函数,该函数以行号作为参数,并返回特定行所需要的空格数量。例如:
*   *
 * * 
  *
 * *
*   *

每行中的空格数量为:
0 [*] 3 [*]
1 [*] 1 [*]
2 [*] 
1 [*] 1 [*]
0 [*] 3 [*]

请注意,在每一行内,您需要两个循环:第一个循环用于初始和中间空格。

整个程序中我如何只使用一个星号来实现它? - TTT

0
#include "stdafx.h"
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
int  i, d, a=1,b=12,c ,e=1;
        for(i = 1; i <= 6; i++)
            {
                for (d=1; d<i;d++) {cout <<" ";}
                cout<<"***";
                for (c=a+1; c<b;c++) {cout <<" ";}
                {cout<<"***";}
                for(b=12-i;b<i;b++) 
                {cout<<"***";}
                cout<<endl;
                a++;
        }
for( i = 1; i <= 3; i++)
        {
            for ( d=6; d>i;d--) {cout <<" ";}
            cout<<"***";
            for (c=0; c<e-1;c++) {cout <<"  ";}
            {cout<<"***";}
            cout<<endl;
            e++;
    }

return 0;
}   

0
我写的解决方案是20年前(当时我还在学习):
  • 创建一个行列数组,例如char screen[80][25];
  • 通过将所有条目设置为' '来清除它
  • 通过设置screen[x][y]='*';在x,y处“绘制一个点”
  • 完成后,通过调用2080次cout(2000次用于字符和80次用于endl渲染整个screen[80][25]

在您的情况下,您知道如何绘制\。 您可以轻松地进行调整。 但是使用我的方法,您可以在同一screen数组中绘制/。 完成后,您在最后一步拥有重叠的/\X

我使用这种方法,因为我们需要画一个圆,那真的很难。是的,现在我可能会使用std::vector<std::string> screen,但当时屏幕只有80x25 :)


0
int n=11,i=0,k=0,j=0;
for(i=0;i<n;i++)
{
if(i<(n/2)) 
 {
    cout<<endl;
    for(j=0;j<i;j++)
    {
        cout<<" ";
    }
    cout<<"*";
    for(k=n/2;k>i;k--)
    {
        cout<<"  ";
    }
    cout<<"*";
 }
else
 {
    cout<<endl;
    for(k=n-1;k>i;k--)
    {
        cout<<" ";
    }
    cout<<"*";
    for(j=n/2;j<i;j++)
    {
        cout<<"  ";
    }
    cout<<"*";
 }  
}

虽然这段代码确实画出了一个“X”,但你可能需要解释每个部分,以便OP能够理解并可能修改它以适应自己的需求(例如,修改线条的粗细)。 - AndyG

-1
#include "stdafx.h"
#include <iostream>
using namespace std;;


int _tmain(int argc, _TCHAR* argv[])
{
    int i,k,j;
    for (i=1;i<8;i++)
    {
        for (int k=0;k<i;k++)
        {
            cout<<" ";
        }
        cout<<"*";
        for (int k=8;k>i;k--)
        {
            cout<<"  ";
        }
        cout<<"*";
        cout<<endl;
    }
    for (i=1;i<8;i++)
    {
        for (int k=8;k>i;k--)
        {
            cout<<" ";
        }
        cout<<"*";

        for (int k=0;k<i;k++)
        {
            cout<<"  ";
        }
        cout<<" *";
        cout<<endl;
    }

    system("Pause");
    return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接