C++编写程序的问题,编程高手进下帮忙!!!!!!

*
* * *
* * * * *
* *
* * * * * *
* * * * * * * * * *
* * *
* * * * * * * * *
* * * * * * * * * * * * * * *
要求输入层数,输出三角形.如上为三层..
先给出程序,再详细讲解一下图形中输出空格的算法!!!谢谢了!!!
第一行的星号在最中间.....
哪位高手讲的详细,能让我明白,我追加50分!!!!!!!
....无语了,最起码用C++写出来啊....
算法得再详细点,最好多加些文字来解释....
第一个给出的那个答案是错的,需要高手来指点!!!

#include <stdio.h>
int main()
{
int n,i,j,k,t;
while(scanf("%d",&n),n)//以0为输入结束的标志
{
t=0;//记录层数
while(n--)//共n层,没层分别计算
{
t++;
for(k=1;k<=3;k++)//一个小层又可以分为三层,每层分别计算
{
for(i=0;i<n;i++)//计算每层输入前需要输入的空格数,注1;
printf(" ");
for(i=1;i<=t;i++)
{
for(j=1;j<=3-k;j++)//每个三角形中,每一层的空格数
printf(" ");
for(j=1;j<=2*k-1;j++)//输出“* ”的个数
printf("* ");
for(j=0;j<3-k;j++)//输入“* ”之后需要输入的空格数
printf(" ");
printf(" ");//最后还要输出“ ”相当于“* ”占的位数
}
printf("\n");//输入结束后,有个回车
}
//printf("\n");//最后输出回车,这个题目中你没有表述得好清楚,好像有个空行
}
}
return 0;
}
这里我编程的思想是:带*号的三角形当成一个矩形,然后该输出*的就输出*,该输出” “的就输出空格。自己再画图,然后根据程序想一想就好了。应该不是很难的。
希望你能满意,浪费了一个来小时的时间,也不知道你这个题目从何而来的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-09-09
#include <stdio.h>
#include<iostream>
using namespace std;
int main()
{
void oneStaLine();//声明,看下面的定义就明白了
void threeStaLine();
void fiveStaLine();
unsigned int m=0;
cout<<"请输入层数:";
cin>>m;
cout<<endl;

for(int i=1;i<=m*3;i++)
{
if((i+2)%3==0)//判断是否是第1、4、7……行
{
for(int j=1;j<=(m*3-1)-(i-1);j++)
cout<<" ";
for(int k=1;k<=(i+2)/3;k++)
{
oneStaLine();
for(int l=5;l>0;l--)
cout<<" ";
}
cout<<endl;
}
if((i+1)%3==0)//判断是否是第2、5、8……行
{
for(int j=1;j<=(m*3-1)-(i-1);j++)
cout<<" ";//输出这行第一个*前的空格
for(int k=1;k<=(i+1)/3;k++)
{
threeStaLine();
for(int l=3;l>0;l--)
cout<<" ";//输出这行中间的空格
}
cout<<endl;
}
if(i%3==0)//判断是否是第3、6、9……行
{
for(int j=1;j<=(m*3-1)-(i-1);j++)
cout<<" ";
for(int k=1;k<=i/3;k++)
{
fiveStaLine();
cout<<" ";
}
cout<<endl;
}
}

return 0;
}
void oneStaLine()
{
cout<<"*";
}
void threeStaLine()
{
cout<<"***";
}
void fiveStaLine()
{
cout<<"*****";
}
第2个回答  2009-09-08
#include<iostream>
using namespace std;
int main()
{
void oneStaLine();//声明,看下面的定义就明白了
void threeStaLine();
void fiveStaLine();
unsigned int m=0;
cout<<"请输入层数:";
cin>>m;
cout<<endl;

for(int i=1;i<=m*3;i++)
{
if((i+2)%3==0)//判断是否是第1、4、7……行
{
for(int j=1;j<=(m*3-1)-(i-1);j++)
cout<<" ";
for(int k=1;k<=(i+2)/3;k++)
{
oneStaLine();
for(int l=5;l>0;l--)
cout<<" ";
}
cout<<endl;
}
if((i+1)%3==0)//判断是否是第2、5、8……行
{
for(int j=1;j<=(m*3-1)-(i-1);j++)
cout<<" ";//输出这行第一个*前的空格
for(int k=1;k<=(i+1)/3;k++)
{
threeStaLine();
for(int l=3;l>0;l--)
cout<<" ";//输出这行中间的空格
}
cout<<endl;
}
if(i%3==0)//判断是否是第3、6、9……行
{
for(int j=1;j<=(m*3-1)-(i-1);j++)
cout<<" ";
for(int k=1;k<=i/3;k++)
{
fiveStaLine();
cout<<" ";
}
cout<<endl;
}
}

return 0;
}
void oneStaLine()
{
cout<<"*";
}
void threeStaLine()
{
cout<<"***";
}
void fiveStaLine()
{
cout<<"*****";
}
第3个回答  2009-09-09
#include <iostream>

using namespace std;

int main()
{
int n;
cin>>n;
for(int i=0; i<n*n; ++i)
{
cout.width(n*n-i);
for(int j=0; j<=i%n*2; ++j)
cout<<'*';
for(int j=1; j<=i/n; ++j)
{
for(int k=0; k<n*2; ++k)
cout<<(k<(n-i%n)*2-1?' ':'*');
}
cout<<endl;
}
}本回答被网友采纳
相似回答