这次高手病挑战还是一个比较简单的打印图形~
但由于高手嘛~当然要一步到位咯~不过程序变量公式太长~得要分开几个参数来保存数据~
图形很简单啊~真的~
以N=5为例~
*
***
*****
*******
*********
代码如下~
公式也许难以理解~就算写注释也没啥用~因为要理解就要自己一步一步推导出来~
#include<stdio.h>
#include<math.h>
#define N 10
int main()
{
int i=0;
int k=N*(N+1)/2;
for (i=k;i<N*(2*N+1);i++)
{
double a=sqrt(8*i+9)-1;
double b=fmod(a,2);
int c=(int )floor(a/2-N);
int d=(N-1)+c*(2*N+c-1)/2;
printf("%c","*\n \n"[(b==0)+2*(i-k<d)]);
}
return 0;
}
后记~很想写写注释~但是感觉自己还不能完全理解透公式~有一部分公式修改是根据实际打印结果调试出来的~怕自己解释会越讲越乱~最后都不知道自己在讲什么了~还是保留意见好~有兴趣的可以用数列知识推导~不过我想没啥人会有这等功夫了~理解思路就行了~就是求数列通项公式以及数列求和~和对应打印的字符~
感觉自己对于数列还不太熟悉~还要再强化一下才行~