正六边形C语言输出算法记录
要求:输入一个正整数n,输出一个边长为n的六边形。
#include<stdio.h>
int n,re=-1;
void print(int *bealoon) //对应的打印函数
{
int i;
for(i=0;i<3*n-2;i++)
{
if(bealoon[i]==1) printf("*");
if(bealoon[i]==0) printf(" ");
}
printf("\n");
}
void eva(int left,int right,int *bealoon)
{
int i;
for(i=0;i<3*n-2;i++) bealoon[i]=0;
if(right-left==n-1) //顶层与底层的特殊赋值处理
{
for(i=left;i<=right;i++) bealoon[i]=1;
if(re==1) return;
}
if(left==0) re=1;
bealoon[left]=1;
bealoon[right]=1;
print(bealoon);
eva(left+re,right-re,bealoon);
return;
}
int main()
{
scanf("%d",&n);
// n=100; //测试数据
int left,right;
int bealoon[3*n-2];
left=n-1;
right=2*n-2;
eva(left,right,bealoon);
print(bealoon);
return 1;
}
注:本来对数组归零时想使用memset函数,但是没有成功,所以使用老土办法清零,把错误百度一下记在这里
int some_func(struct something *a)
{
…
…
memset(a,0,sizeof(a));
…
}
/*摘自百度百科
其实这个错误严格来讲不能算用错memset,
但是它经常在使用memset的场合出现这里错误的原因是VC函数传参过程中的指针降级,
导致sizeof(a),返回的是一个 something*指针类型大小的的字节数,如果是32位,就是4字节。
*/