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;
}
这个在题目里是过不了的。