-1

大家好,我只想问如何使用 C++ 创建三角形?

实际上我有我的代码,但我不知道如何在三角形中居中第一个星号。我的三角形是左对齐的。我怎样才能使它成为一个金字塔?

下面是我的代码。

#include<iostream>
using namespace std;

int main(){

    int x,y;
    char star = '*';
    char space = ' p ';
    int temp;   

    for(x=1; x <= 23; x++){ 

        if((x%2) != 0){

            for(y=1; y <= x ; y++){     

                cout << star;
            }

            cout << endl;           
        }       
    }

    return 0;
}
4

8 回答 8

3

对于高度为 Y 的三角形,首先打印 Y-1 个空格,然后是星号和换行符。然后为下一行打印 Y-2 个空格,后跟三个星号(比之前打印的多两个)和一个换行符。第三行打印 Y-3 个空格,后跟五个星号(再次比上一行多两个)和一个换行符。继续,直到打印出整个三角形。

类似于以下内容

int asterisks = 1;
for (int y = HEIGHT; y > 0; --y, asterisks += 2)
{
    for (int s = y - 1; s >= 0; --s)
        std::cout << ' ';

    for (int a = 0; a < asterisks; ++a)
        std::cout << '*';

    std::cout << '\n';
}
于 2013-09-12T09:19:57.110 回答
1

要计算使每行居中所需的空间数,请使用以下算法:

numSpaces = (23 - x) / 2;

然后是一个for循环来应用空间numSpaces时间。

这是完整的代码:

#include<iostream>
using namespace std;

int main(){

    int x,y;
    char star = '*';
    char space = ' p ';
    int temp;
    int numSpaces = 0;

    for(x=1; x <= 23; x++){ 

        if((x%2) != 0){
            numSpaces = (23 - x) / 2;  // Calculate number of spaces to add

            for(int i = 0; i < numSpaces; i++) // Apply the spaces
            {
                cout << " ";
            }       

            for(y=1; y <= x ; y++){     

                cout << star;                   

            }   
            cout << endl;
        }
    }
    return 0;
}

和输出:

           *
          ***
         *****
        *******
       *********
      ***********
     *************
    ***************
   *****************
  *******************
 *********************
***********************
于 2013-09-12T09:26:12.837 回答
1

一种方法是嵌套两个内循环,一个打印空格,一个打印 *(s),在一个外循环内逐行向下移动屏幕。

#include <iostream>
using namespace std;

int main(){
    int row = 5;
    for(int i=0; i<row; i++){
        for(int j=row; j>i; j--){
            cout << " ";
        }
        for(int k=0; k<2*i+1; k++){
            cout << "*";
        }
        cout << endl;
    }
    return 0;
}

输出:

    *
   ***
  *****
 *******
*********
于 2019-06-10T21:01:50.087 回答
0

此代码使用 C# 编写,但您可以将其转换为 c++。

class Program
    {
        static void Main()
        {
            int n = 5; // Number of lines to print.
            for(int i = 1; i<= n; i++){
                //loop for print space in the order (4,3,2,1,0) i.e n-i; 
                for(int j= 1; j<= n-i; j++){
                Console.Write(" ");    
                }
                //loop for print * in the order (1,3,5,7,9..) i.e 2i-1; 
                for(int k= 1; k<= 2*i-1; k++){
                Console.Write("*");    
                }
                Console.WriteLine(); // Next Line.
            }
        }
    }
于 2015-02-23T09:59:10.140 回答
0

这是另一个不使用除法或if语句的解决方案

#include <iostream.h>

int main() {

    int height = 17, rowLength, i, j, k;
    char symbol = '^';

    // print a pyramid with a default height of 17
    rowLength = 1;
    for (i = height; i > 0; i--) {      // print a newline
        cout << endl;

        for (j = 1; j <= i; j++)        // print leading spaces
            cout << " ";

        for (k = 0; k < rowLength; k++) // print the symbol
            cout << symbol;

        rowLength = rowLength + 2;      // for each row increase the number of symbols to print
    }
    cout << "\n\n ";
    return 0;
}
于 2015-05-04T03:09:02.510 回答
0
#include<iostream>
using namespace std;
int for1(int &row);//function declaration  

int rows;//global variable
int main()
{
    cout<<"enter the total number of rows  : ";
    cin>>rows;
    for1(rows);//function calling
    cout<<"just apply a space at the end of the asteric  and volla ";

}

int for1(int &row)//function definition 
{
    for(int x=1;x<=row;x++)//for loop for the lines 
    {
        for(int y=row;y>=x;y--) //for loop for spaces (dynamic loop)
        {
            cout<<" ";
        }
        for(int k=1;k<=x*2-x;k++)//for loop for asteric
        {
            cout<<"* ";/*apply a space and you can turn a reverse right angle triangle into a pyramid */
        }
        cout<<endl;
    }
}
于 2017-08-28T12:30:01.490 回答
0

我用两个循环做到了

这是我的代码

#include <iostream>
#include <string>

using namespace std;

int main() {
    int rows, star, spaces;
    int number_of_stars = 5;
    int number_of_rows = number_of_stars;
    string str1 = "*"; 

    for (rows=1; rows <= number_of_rows; rows++) {
            for (spaces=1; spaces <= number_of_stars; spaces++) {
                    if (spaces==number_of_stars)
                    {
                         cout<<str1;
                         str1+="**";
                    }
                    else
                        cout<<(" ");
            }
            cout<<("\n");
            number_of_stars = number_of_stars - 1;
    }
    return 0;
}

结果是

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

在线编译器上的代码网址

只需一个循环即可解决,简单易行

#include <iostream>
#include <string>
using namespace std;
int main()
{
    int numberOfLines=4;
    string spaces=string( numberOfLines , ' ' );//this is 4 spaces 
    string stars="*";
    while(spaces!="") 
    {
        cout<<spaces<<stars<<endl;
        spaces = spaces.substr(0, spaces.size()-1);
        stars+="**";
    }
}

在线编译器上的代码网址

于 2016-09-05T06:44:29.300 回答
0

仅使用 for 循环的星形金字塔:-

#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
int main()
{
    int n;
    cout << "enter the number of rows of pyramid you want : ";
    cin >> n;
    "\n";
    for (int i = 0; i <= n; ++i) {
        cout << "\n";
        for (int j = 0; j <= n - i; ++j) {
            cout << " ";
        }
        for (int k = 1; k <= i; k++) {
            cout << setw(3) << "*";
        }
    }
    return 0;
}
于 2015-07-18T04:02:21.177 回答