/*
问题:输入高度h,输出高为h,上底边围h的梯形
------------
--------------
----------------
------------------
--------------------
思路:
由于多出的底边x可以设为任意值,不放设x=h
第1行, h h
第2行,打印h-1个空格,1个*,然后打印h个空格,再打印1个* h+2*1
3 h-2 1 h+2*1 1个* h+2*2
4 h-3个空格,1个* h+2*2 1个*
h-1 2 ,1个* h+2*(h-1-2)个空格,即h+2*(h-3),1个*
i h+1-i 1个* h+2*(i-2)个空格,1个* h+2*(i-1)
h 1个空格 ,3h个*
打印第一行时,先打印h个空格,再打印h个*号,
然后打印h个换行符
最后打印长度为2h个的*号
总结公式:
print(*)= {h个空格,h个*,i=1
{1个空格,3h个*,i=h 错,是3h-2个*,因为,h最后一行有2个*公用了
{h+1-i个空格,1个*,h+2*(i-2)个空格,1个*
参考:
计算机考研--机试指南
*/
//等腰梯形
/*
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char* argv[])
{
int h,i;
while(EOF!=scanf("%d",&h) && h >= 1 && h <= 1000)
{
int iLinNum = 1;
while(iLinNum <= h)
{
if(iLinNum > 1 && iLinNum < h)
{
for(i = 1;i <= (h+1-iLinNum) ; i++)
{
printf("%c",' ');
}
/*
printf("%c",'*');
for(i = 1; i <= (h+2*(iLinNum-2)) ; i++)
{
printf("%c",' ');
}
printf("%c",'*');
*/
/*
for(i = 1;i <= (h+2*(iLinNum-1)) ; i++)
{
printf("%c",'*');
}
printf("\n");
iLinNum++;
}
else if(1==iLinNum)
{
for(i = 1 ; i <= h ; i++ )
{
printf("%c",' ');
}
for(i = 1 ; i <= h ; i++ )
{
printf("%c",'*');
}
printf("\n");
iLinNum++;
}
else if(h==iLinNum)
{
printf("%c",' ');
for(i = 1;i <= 3*h - 2 ; i++)
{
printf("%c",'*');
}
printf("\n");
iLinNum++;
}//else if
}//while
}//while
system("pause");
getchar();
return 0;
}
*/
/*
样例输入:4
输出:
****
******
********
**********
公式:
第一行h个*,前面空 h+2*(h-1)-h个空格= 2*(h-1)个空格
二 h+2个*
i h+2*(i-1)个*,前面空 h+2*(h-1)-[h+2*(i-1)] = 2*(h-i)个空格
h h+2*(h-1)个*
print(*) = {2*(h-i)个空格,h+2*(i-1)个*,第i行
*/
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char* argv[])
{
int h,i;
while(EOF!=scanf("%d",&h) && h >= 1 && h <= 1000)
{
int iLinNum = 1;
while(iLinNum <= h)
{
for(i = 1 ; i <= 2*(h-iLinNum); i++)
{
printf("%c",' ');
}
for(i = 1; i <= h+2*(iLinNum-1) ; i++)
{
printf("%c",'*');
}
iLinNum++;
printf("\n");
}
}
system("pause");
getchar();
return 0;
}