问题标题: 酷町堂:图形打印

0
0
已解决
吴庞茂旭
吴庞茂旭
资深光能
资深光能

呵呵!今天我来写打印图形了!

这是我的代码,可以学习,但不准抄!

//Coding
#pragma GCC optimize(2)
#include <iostream>
#include <cstdio>
#include <string>
#include <iomanip>//setw() is in it
#define maxn 10
using namespace std;
int m=maxn;
string s;
int main()
{
    cout<<"正方形\n";
    for(int i=1;i<=maxn;i++)
    {
        for(int j=1;j<=maxn;j++)
            cout<<"* ";
        cout<<endl;
    }
    cout<<"长方形\n";
    for(int i=1;i<=maxn;i++)
    {
        for(int j=1;j<=maxn*2;j++)
            cout<<"* ";
        cout<<endl;
    }
    cout<<"左三角形\n";
    for(int i=1;i<=maxn;i++)
    {
        s+="* ";
        cout<<s<<endl;
        cout<<endl;
    }
    s="";
    cout<<"右三角形\n";
    for(int i=1;i<=maxn;i++)
    {
        s+="* ";
        cout<<setw(maxn*2)<<s<<endl;
    }
    s="";
    cout<<"金字塔\n";
    for(int i=1;i<=maxn;i++)
    {
        s+="* ";
        cout<<setw(maxn+i)<<s<<endl;
    }
    s="";
    cout<<"倒金字塔\n";
    for(int i=0;i<maxn;i++)
    {
        printf("%*s",i,"");
        for(int j=1;j<2*(maxn-i);j++)
        {
            if(j%2)cout<<"*";
            else cout<<" ";
        }
        printf("\n");
    }
    s="";
    cout<<"平行四边形\n";
    for(int i=1;i<=maxn;i++)
    {
        cout<<setw(i)<<"";
        for(int j=1;j<=maxn;j++)cout<<"* ";
        cout<<endl;   
    } 
    cout<<"菱形\n";
    for (int i = 0; i < maxn; i++)               // 外层控制循环次数,输入的数字就是上半层循环的次数
    {                                         // (n-1)比外层循环少一次,减去i就是每行少一个空格
        for (int j = 0; j < (maxn - 1) - i; j++) // 内层循环打印空格的个数 外层循环n次 内层循环n-1次
        {                                     // 循环几次几个空格 
            cout << " ";                    // 第n层的时候 i=n-1 空格为0  所以这层不用循环 所以循环次数可以变成n-1
        }                             // 或者j<n-1-i
        //星星的个数是 1 3 5 7 9 12...2*n+1 的等差数列形式递增的
        for (int j = 0; j < (2 * i + 1); j++) // 内层循环打印行星的个数   i=0时  j<=0 循环1次 打印一颗星
                                              // 循环几次几个星星         i=1时  j<=2 循环3次 打印三颗星  以此类推
        {                                     // 也可以写成 j<2*i+1  一样
            cout << "*";
        }
        cout << endl;
    }
    //下半层
    for (int i = 0; i < maxn - 1; i++)                    
    {
        for (int j = 0; j < i + 1; j++)       // 下半层从上往下 空格个数越来越多 循环次数也就跟着增多
        {
            cout << " ";
        }
        for (int j = 0; j < 2 * ( maxn - 1 ) - (1 + 2 * i); j++)//下半层从上往下 星星个数依次递减 循环次数也就跟着减少
        { 
            cout << "*";                     // 星星的个数是 2*n-1  2*n-3 .....2*n-(1+2*i) 等差数列递减 
        }
            cout << endl;            // 和上面一样、 循环几次几个星星  
    }
    cout<<"空心版:\n左三角形\n";
    s="*",m=maxn;
    for(int i=1;i<=maxn;i++)
    {
        for(int j=1;j<=i;j++)
        {
            if(j==1||j==i||i==maxn)cout<<"* ";
            else cout<<"  ";
        }
        cout<<endl;
    }
    cout<<"倒三角\n";
    for(int i=maxn;i>=1;i--)
    {
        cout<<setw(maxn-i+2)<<"* ";
        for(int j=i;j>=1;j--)
        {
            if(j==1||i==maxn)cout<<"* ";
            else cout<<"  ";
        }
        cout<<endl;
    }
    cout<<setw(maxn+1)<<"*";
    getchar();
    return 0;   
} 

这个在题目里是过不了的。


0
0
0
0
0
吴庞茂旭
吴庞茂旭
资深光能
资深光能

谁先发“你是蒟蒻”(就是这四个字)我就采纳谁

0
王文博
王文博
缔造者之神
缔造者之神

我一发你就举报我……

我不会为了酷町豆而违反规定……

不过代码很好

我要回答