/**************************************
解法一:
常规思路解法
code by 广陵绝唱
**************************************/
#include<stdio.h>
int main(void)
{
int i,j;
for(i=1;i<=4;++i)
{
for(j=1;j<=10-i;++j)
printf(" ");
printf("*");
for(j=1;j<=2*i-3;++j)
printf(" ");
if(i==1)
{
puts(" ");
continue;
}
printf("*");
puts(" ");
}
for(i=3;i>=1;--i)
{
for(j=1;j<=10-i;++j)
printf(" ");
printf("*");
for(j=1;j<=2*i-3;++j)
printf(" ");
if(i==1)
break;
printf("*");
puts(" ");
}
getch();
}
/**************************************
解法二:
基于条件判断输出不同字符
code by 雨中飞燕
**************************************/
#include <stdio.h>
#define ABS(a) (a<0?-a:a)
#define N 3
int main()
{
int i,j;
for(i=-N;putchar('\n'),i<=N;++i)for(j=-N;j<=N;++j)
if(ABS(i)+ABS(j)==N)putchar('*');else putchar(' ');
return 0;
}
/**************************************
解法三:
基于格式字符串
code by 雨中飞燕
**************************************/
#include <stdio.h>
#define ABS(a) (a<0?-a:a)
#define J ABS(i)
#define N 3
int main()
{
int i;char*p="*";
for(i=-N;i<=N;++i)
printf("%*s%*s\n",J+1,p,(N-J)*2,&p[J==N]);
return 0;
}
/**************************************
解法四:
基于格式字符串
code by moonwalker
说明:开始没有想到好的办法,用了这个
超常的字符串读取字符
**************************************/
#include<stdio.h>
int main()
{
int i,m;
for(i=1,m=1;i<8;i++,m=i-(i/4)*(i%4)*2)
printf("%*s%*s\n",4-m," "+m-1,2*m-1,"*\0* *\0* *\0* *"+m*(m-1));
return 0;
}
/**************************************
解法五:
基于格式字符串
code by moonwalker
说明:解法四的改进版,只用一个字符串
可以实现
**************************************/
#include<stdio.h>
int main()
{
int i,m;
char *p =" *";
for(i=1,m=1;i<8;i++,m=i-(i/4)*(i%4)*2)
printf("%s%*s\n",p+m,2*m-2,p-2*m+8);
return 0;
}
" border="0" />
[[it] 本帖最后由 雨中飛燕 于 2008-4-20 13:27 编辑 [/it]]